質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

受付中

【python】seleniumを用いたスクレイピングでの、エラー(StaleElementReferenceException)について

konie
konie

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1回答

0評価

1クリップ

205閲覧

投稿2022/08/12 11:19

編集2022/08/15 16:14

エラーメッセージ

StaleElementReferenceException: Message: stale element reference: stale element not found

調べてみても、この"stale element not found"というエラーへの対処法が見つからず、いろいろ試してみたのですが、改善されずに困っています。

実現したいこと

<div class="class"> #選択項目のボックス。ここをクリックすることで項目リストを表示 <select id="id" name="name" class="class1 class2 class3"> <option value>aaa</otpion> <option value="value1">bbb</otpion> <option value="value2">ccc</otpion> <option value="value3">ddd</otpion> </select> </div>

上記のものが、ウェブページのコードの一部分を抜粋したものになります。実際のページ上では、ボックスをクリックすることで選択可能なリストが表示され、そこから自分が指定したい項目を選ぶものです。
スクレイピングの際に、この項目を自由に指定してデータを拾ってきたいと考えています。

試したこと

Python

from selenium import webdriver from selenium.webdriver.support.ui import Select driver = webdriver.Chrome("C:******") URL = "https://******" driver.get(URL) driver.find_element_by_xpath("xpath1").click() driver.find_element_by_xpath("xpath2").send_keys("id") driver.find_element_by_xpath("xpath3").send_keys("password") driver.find_element_by_xpath("xpath4").click() #以下がエラー箇所になります。 #1つ目(調べた結果、もっとも一般的そうな方法だと思われます) element=driver.find_element_by_name("name") select = Select(element) select.select_by_index(n) #indexでもvalueでもtextでも試しました #2つ目(項目ををクリックする方法) driver.find_element_by_css_selector("class").click() element = driver.find_element_by_css_selector(".class > class1 :nth-child(n)").click() #3つ目 element = driver.find_element_by_xpath("デベロッパーツールから拾ってきたXPATH") driver.execute_script("arguments[0].click()", element) element = driver.find_element_by_css_selector(".class > class1") select = Select(element) select.select_by_index(1) 4つ目(項目がクリックされていないとだめなのかと考え、クリック後1つ目を実行) driver.find_element_by_css_selector(".class").click() element = driver.find_element_by_css_selector(".class > class1") select = Select(element) select.select_by_index(n) #頂いた意見を基に実行したコード time.sleep(5) element = driver.find_element_by_name("name") time.sleep(5) select = Select(element) time.sleep(5) select.select_by_index(1)

補足情報(FW/ツールのバージョンなど)

ボックスクリック後に表示される項目リストにはXPATHが与えられておらず、そこからクリックする方法はできませんでした。time.sleep()でプログラムを止めてみたり、print(len(driver.find_elements_by_css_selector("class > class1 > option)))で、そもそも項目が存在するのかを表示させてみようとしたりもしたのですが、ダメでした(後者については、同様に"stale element not found"が表示されました)。

スクレイピングをはじめてまだ数日なので、至らない点もあると思いますが、ご教授頂けると幸いです。質問がございましたらお答えしますので、どうぞ宜しくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。