エラーメッセージ
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
1from selenium import webdriver 2from selenium.webdriver.support.ui import Select 3 4driver = webdriver.Chrome("C:******") 5URL = "https://******" 6driver.get(URL) 7 8driver.find_element_by_xpath("xpath1").click() 9driver.find_element_by_xpath("xpath2").send_keys("id") 10driver.find_element_by_xpath("xpath3").send_keys("password") 11driver.find_element_by_xpath("xpath4").click() 12 13#以下がエラー箇所になります。 14#1つ目(調べた結果、もっとも一般的そうな方法だと思われます) 15element=driver.find_element_by_name("name") 16select = Select(element) 17select.select_by_index(n) #indexでもvalueでもtextでも試しました 18 19#2つ目(項目ををクリックする方法) 20driver.find_element_by_css_selector("class").click() 21element = driver.find_element_by_css_selector(".class > class1 :nth-child(n)").click() 22 23#3つ目 24element = driver.find_element_by_xpath("デベロッパーツールから拾ってきたXPATH") 25driver.execute_script("arguments[0].click()", element) 26element = driver.find_element_by_css_selector(".class > class1") 27select = Select(element) 28select.select_by_index(1) 29 304つ目(項目がクリックされていないとだめなのかと考え、クリック後1つ目を実行) 31driver.find_element_by_css_selector(".class").click() 32element = driver.find_element_by_css_selector(".class > class1") 33select = Select(element) 34select.select_by_index(n) 35 36 37#頂いた意見を基に実行したコード 38time.sleep(5) 39element = driver.find_element_by_name("name") 40time.sleep(5) 41 42select = Select(element) 43time.sleep(5) 44select.select_by_index(1)
補足情報(FW/ツールのバージョンなど)
ボックスクリック後に表示される項目リストにはXPATHが与えられておらず、そこからクリックする方法はできませんでした。time.sleep()でプログラムを止めてみたり、print(len(driver.find_elements_by_css_selector("class > class1 > option)))で、そもそも項目が存在するのかを表示させてみようとしたりもしたのですが、ダメでした(後者については、同様に"stale element not found"が表示されました)。
スクレイピングをはじめてまだ数日なので、至らない点もあると思いますが、ご教授頂けると幸いです。質問がございましたらお答えしますので、どうぞ宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。