python - 如何单击网页中所有选定的链接,然后返回登录页面并单击下一个链接
问题描述
我刚刚开始使用硒。现在我有了我想要点击的所有链接。这些链接将我引导到我想要抓取的页面。当驱动程序单击第一个链接时,它可以正常工作,但是在第二个链接上单击时,我收到以下消息:
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()
我想抓取该页面并返回到打开页面,然后单击下一个链接。帮助将不胜感激
解决方案
当对(已找到并保存的)元素的引用发生更改时,将引发过时元素引用异常。在您的情况下,您导航到一个新页面,但您的列表包含作为父页面一部分的已保存元素。因此,当您向后导航时,列表中的元素会变得陈旧。
这可以通过从抓取的网页重新初始化导航包上的元素/列表来解决。您必须更改列表上的迭代以迭代索引。
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']")
推荐阅读
- java - lombok 是否适用于 Java 12?
- angular - 当我打开页面时调用 Firebase 只发生一次,然后当我导航回它时它永远不会发生
- javascript - 如何使用 javascript 制作实时 2D 密度图
- php - 在 findBy 之后,Doctrine 重写了与急切获取值的关系
- javascript - 如何以编程方式在铬中添加 HTML DOM 断点?
- instagram-api - 如何使用 API 从 instagram 获取业务页面图标?
- r - 使用 R 将 Cloudera Workbench 上执行的脚本中的 HUE 表保存到我的笔记本电脑上
- java - 创建自定义gradle插件分析java源码并生成代码
- html - 为什么对表格数据使用 div 而不是表格?
- javascript - 如何在 JSFiddle 中模拟 Ajax 请求