Amazon 検索結果をスクレイピングすると、後続のページのページネーション中に StaleElementException および ValueError エラーが発生します。この問題を調査すると、ナビゲーションを担当するページ要素が最初のページの読み込み後に失効するか使用できなくなることが示唆されます。
提供されたコードを調査すると、問題は暗黙的な待機に関連している可能性があるようです。コードでは 10 秒の待機が示されていますが、完全な 10 秒の一時停止が保証されるわけではありません。代わりに、最大 10 秒の待機時間が許容されますが、待機はターゲット要素が見つかると終了します。
この問題を軽減するには、後続のアクションを実行する前にページの安定性を確保する、より明示的なアプローチをお勧めします。代替ソリューションは次のとおりです。
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 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
このソリューションでは、明示的な待機を使用して、ナビゲーションを試行する前に次のページ ボタンがクリック可能になることを確認します。待機は最大 10 秒間、またはボタンが見つかって操作の準備ができるまで続きます。このアプローチにより、古い要素の問題が排除され、信頼性の高い自動化が保証されます。
以上がAmazon での反復 Web スクレイピング中に StaleElementException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。