首頁  >  文章  >  後端開發  >  如何防止 Selenium 網頁抓取中的 StaleElementException?

如何防止 Selenium 網頁抓取中的 StaleElementException?

Patricia Arquette
Patricia Arquette原創
2024-11-18 10:20:02560瀏覽

How to Prevent StaleElementException in Selenium Web Scraping?

使用Python 迭代時出現StaleElementException

介紹

自動化執行任務時,這是必不可少的有效地處理頁面互動以避免異常。可能出現的常見問題是 StaleElementException,表示 Web 元素不再有效。

根本原因和解決方案

在給定的程式碼中,發生 StaleElementException因為在對元素執行操作之前頁面尚未完全載入。為了解決這個問題,可以使用 WebDriverWait。 WebDriverWait 允許指定明確等待條件,直到元素可用。

使用WebDriverWait 的程式碼:

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver.get('https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=sonicare+toothbrush')

for page in range(1, last_page_number + 1):
    try:
        button = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[@id="pagnNextString"]')))
        button.click()
    except TimeoutException:
        break

在此更新的程式碼中,WebDriverWait 與明確一起使用條件是等待「下一步」按鈕可按一下。這可以確保頁面已完全加載並且元素在繼續之前可用。

附加說明

  • 避免使用implicitly_wait(),因為它會導致效率低下等待。根據需要使用顯式等待。
  • 如果在遇到 StaleElementExceptions 後遇到 ValueError,可能是由於該元素在頁面上不再可用。嘗試新增額外的錯誤處理機制來解決此類情況。

以上是如何防止 Selenium 網頁抓取中的 StaleElementException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn