首页 > 解决方案 > 如何单击网页中所有选定的链接,然后返回登录页面并单击下一个链接

问题描述

我刚刚开始使用硒。现在我有了我想要点击的所有链接。这些链接将我引导到我想要抓取的页面。当驱动程序单击第一个链接时,它可以正常工作,但是在第二个链接上单击时,我收到以下消息:

Message: stale element reference: element is not attached to the page document

def view_All_pages(driver , file_object):
    #All the Links that i want to click
    list_of_links = driver.find_elements_by_xpath("//a[@class='@ClassName']")
    for link in list_of_links:
        time.sleep(10)
        link.click()  #Getting the error here
        scraping_Normal_page(driver , file_object)
        driver.back()

我想抓取该页面并返回到打开页面,然后单击下一个链接。帮助将不胜感激

标签: pythonselenium-webdriverbeautifulsoup

解决方案


当对(已找到并保存的)元素的引用发生更改时,将引发过时元素引用异常。在您的情况下,您导航到一个新页面,但您的列表包含作为父页面一部分的已保存元素。因此,当您向后导航时,列表中的元素会变得陈旧。

这可以通过从抓取的网页重新初始化导航包上的元素/列表来解决。您必须更改列表上的迭代以迭代索引。

def view_All_pages(driver , file_object):
    #All the Links that i want to click
    list_of_links = driver.find_elements_by_xpath("//a[@class='@ClassName']")
    length_of_list  = len(list_of_links)
    # Iterate over the list based on index
    i = 0
    while i < len(length_of_list):
        time.sleep(10)
        list_of_links.index(i).click()
        scraping_Normal_page(driver , file_object)
        driver.back()
        i += 1
        # Reinitialize the list of elements again
        list_of_links = driver.find_elements_by_xpath("//a[@class='@ClassName']")

推荐阅读