首页  >  文章  >  后端开发  >  抓取亚马逊搜索结果时如何避免 StaleElementException?

抓取亚马逊搜索结果时如何避免 StaleElementException?

Barbara Streisand
Barbara Streisand原创
2024-11-22 00:56:14937浏览

How to Avoid StaleElementException When Scraping Amazon Search Results?

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 秒,而是“等待 10 秒让元素出现在 HTML DOM 中”。因此,如果在较短的时间内(例如1或2秒)找到该元素,则等待过程完成。

以上是抓取亚马逊搜索结果时如何避免 StaleElementException?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn