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中文网其他相关文章!