Selenium の反復での StaleElementException
Selenium を使用して Amazon の検索結果を反復処理しようとすると、ユーザーが繰り返し下にスクロールすると StaleElementException が発生する場合があります。新しいページをロードします。このエラーは、ページのリロード後にスクロールに使用される要素bottom_barが無効になるために発生します。
この問題を解決し、より信頼性の高いページネーションを可能にするには、明示的なページスクロールを排除するより単純なアプローチを採用することをお勧めします。代わりに、Selenium は無効になるまで「次へ」ボタンをクリックし続けることができます。これによりコードが簡素化され、ドライバーが結果内を一貫してナビゲートできるようになります。
以下の更新されたコードは、このアプローチを実装しています。
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.common.exceptions import TimeoutException driver = webdriver.Chrome() driver.get('https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=sonicare+toothbrush') while True: try: wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a > span#pagnNextString'))).click() except TimeoutException: break
implicitly_wait(10) は待機しないことに注意してください。完全に 10 秒ですが、「要素が HTML DOM に表示されるまで最大 10 秒待機します」。したがって、それより短い期間 (例: 1 秒または 2 秒) で要素が見つかった場合、待機プロセスは完了します。
以上がAmazon 検索結果をスクレイピングするときに StaleElementException を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。