如何单击网页上所有选定的链接,然后返回到登录页面并单击下一个链接

时间:2019-06-27 04:10:17

标签: python selenium-webdriver beautifulsoup

我刚开始使用硒。现在我有了要单击的所有链接。此链接使我进入要剪贴的页面。当驱动程序单击第一个链接时,它工作正常,但单击第二个链接,我得到的消息为:

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()

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

1 个答案:

答案 0 :(得分:0)

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

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

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']")