【问题标题】:"Stale element reference: element is not attached to the page document" error during loop循环期间出现“过时的元素引用:元素未附加到页面文档”错误
【发布时间】:2022-01-10 22:50:52
【问题描述】:

我有这段代码,我在其中抓取了网上商店主页的产品链接,然后尝试遍历所有链接以从每个产品中抓取信息。

此代码在第一个循环中运行良好(它打开第一个产品页面,然后返回主页),但在第二个循环中我收到错误消息“陈旧的元素引用:元素未附加到页文档”。

from selenium.webdriver.support import expected_conditions as EC

wait_variable = WebDriverWait(driver, 15)

product_links = driver.find_elements(By.XPATH, './/a[@class="product-item-link"]')

for link in product_links:
    wait_variable.until(EC.element_to_be_clickable(link)).click()
    
    #Scrape info from product
    
    driver.back()

【问题讨论】:

    标签: python selenium web-scraping


    【解决方案1】:

    StaleElementReferenceException 在您尝试使用以前找到的元素时出现,该元素不再出现在您所在的网页上。如果您离开该页面,即使您稍后返回同一页面,也会发生这种情况。您需要重新找到该元素才能使用它,并且您必须重新考虑如何使用那里的循环,这是行不通的。也许刮掉链接,然后在新标签页中打开它,这样您就不需要在循环期间离开起始页。

    【讨论】:

    • 感谢您的澄清。由于网页有固定数量的产品,我通过将循环更改为以下代码来修复代码:products_in_page = 20 while x < 20: link=wait_variable.until(EC.element_to_be_clickable(By.XPATH, './/a[@class="product-item-link"]'))[x] link.click() #Scrape info from product driver.back()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2021-12-15
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多