我试图做一个刮刀,将通过一堆链接,导出为PDF格式的指南,并循环通过父文件夹中的所有指南。它运行良好,但是当我试图倒退时,它会抛出陈旧的异常,即使我确保刷新代码中的元素,或者刷新页面。
from selenium import webdriver
import time, bs4
browser = webdriver.Firefox()
browser.get('MYURL')
loginElem = browser.find_element_by_id('email')
loginElem.send_keys('LOGIN')
pwdElem = browser.find_element_by_id('password')
pwdElem.send_keys('PASSWORD')
pwdElem.submit()
time.sleep(3)
category = browser.find_elements_by_class_name('title')
for i in category:
i.click()
time.sleep(3)
guide = browser.find_elements_by_class_name('cell')
for j in guide:
j.click()
time.sleep(3)
soup = bs4.BeautifulSoup(browser.page_source, features="html.parser")
guidetitle = soup.find_all(id='guide-intro-title')
print(guidetitle)
browser.find_element_by_link_text('Options').click()
time.sleep(0.5)
browser.find_element_by_partial_link_text('Download PDF').click()
browser.find_element_by_id('download').click()
browser.execute_script("window.history.go(-2)")
print("went back")
time.sleep(5)
print("waited")
guide = browser.find_elements_by_class_name('thumb')
print("refreshed elements")
print("made it to outer loop")
如果我都使用脚本向后移动浏览器或驱动程序,就会发生这种情况。back()方法。我可以看到它返回到子目录,然后等待并刷新元素。但是,它似乎无法加载新元素以进入下一个指南。我在这里发现了一个类似的问题,但有人只是提供了针对这个问题的代码,而不是解释,所以我仍然感到困惑。
我也知道使用waitdriver,但我现在只使用sleep,因为我不完全了解EC等待条件。无论如何,增加睡眠时间并不能解决这个问题。
由于DOM中的元素UUID更改,页面刷新时会发生过时的元素引用异常。如何避免:始终在交互之前尝试搜索元素。
在您的代码中,您搜索单元格,找到它们并将它们存储在Guide
中。现在,Guide
有一个硒UUID列表。但是,您正在循环遍历列表,每次刷新时(我相信当您返回时会发生这种情况),单元格的UUID会发生变化,因此您存储的旧单元格不再附加到DOM。当试图与它们交互时,Selenium无法在DOM中找到它们并抛出此异常。
而不是循环通过引导
您的方式,尝试每次重新查找元素,如:
guide = browser.find_elements_by_class_name('cell')
for j in range(len(guide)):
browser.find_elements_by_class_name('cell')[j].click()
请注意,看起来类别
可能有类似的问题,所以也尝试将此解决方案应用于类别
。
希望这有帮助。这里有一个类似的问题和解决方案。
问题内容: 如果转到页面a并滚动浏览,则刷新页面将在您离开页面的位置刷新。这很好,但是在URL中存在锚点位置的页面上也会发生这种情况。例如,如果您单击一个链接并在环顾四周后刷新页面,您将不会处于锚点,而页面会跳来跳去。有什么办法可以防止使用javascript吗?因此,无论如何,您始终可以导航到锚点。 问题答案: 由于浏览器行为的更改,不再建议使用此解决方案。查看其他答案。 基本上,如果使用锚,则
我正在尝试简单地登录到这个页面来访问LexisNexis。下面是我的代码: 下面是html源代码:
我对Hibernate和JPA存储库的实现有问题。 我得到了关于错误: "发生异常后不要刷新会话" 这是从第节开始的- 消息表: 用户表: 服务: 可能这就是问题所在——这是一个例外。会议仍然开放。当然,我在服务中有事务注释。 以及执行日志:
我尝试只更新chart.js,而不需要刷新浏览器,也不需要重新加载所有行的动画。我尝试使用简单的命令chart.update(),但它不断刷新浏览器和动画。我想用尽可能简单的方式来做这件事。我的数据来自数据库。 这是我的图表: 这是我试图更新图表的内容:
我正在用随机整数填充ArrayList。然后,当我试图删除它们时,我得到了以下错误: 线程“main”java.lang.indexoutOfboundsException:在java.base/jdk.internal.util.preconditions.outofbounds(preconditions.java:64)在java.base/jdk.internal.util.precond
我在图上实现了一个BFS,其中节点由状态类的对象标记(我实现了一个隐式等于方法进行比较)。 我已经实现了我的队列使用PriorityQueue与一个返回1的比较器,因为我想扩展程序来处理DFS,Astar等,我可以做的只是改变比较器内的逻辑 以下是相关代码: //bfscompariator。JAVA //解算器。JAVA 在遍历列表并打印当前元素时,我发现有些元素没有上移(例如,poll上的{a