我做了一个新的脚本,我想点击()网站上所有列出的链接,找到一些东西,回到列出的链接,点击()下一个链接,找到一些东西,回到列出的链接。
我从网站开始,它为我列出了一些链接:
链路1、链路2、链路3等
links = driver.find_elements_by_xpath("myxpath")
for link in links:
link.click()
try:
time.sleep(2)
wantedelement = driver.find_element_by_xpath("xpath")
wantedelement.click()
#Save to file
tofile = driver.find_element_by_xpath("xpath")
print (tofile.text)
myfile = open("file.txt", "a")
my.write(tofile.text + "\n")
driver.back()
except (ElementNotVisibleException, NoSuchElementException):
driver.back()但我的脚本只检查了一个链接,当返回到列出的链接时,会打印错误:
selenium.common.exceptions.StaleElementReferenceException:消息:元素引用已过时。元素不再附加到DOM,或者页面已刷新。
on line:
for link in links:
link.click() <----我怎么才能修复它?(Python 2.7)
发布于 2017-03-23 06:54:54
有几件事:
不要使用像“睡眠”这样的延迟来同步。改用“等待”条件。
因为你使用的是"back()“,所以你只想在成功移出上一页的情况下才这样做,这就是为什么最好是专门测试这些动作的原因之一--例如,你怎么知道每次click()都会让你”前进“,可能还会涉及到其他一些动作。在这里,您正在对DOM进行假设,这是可以的,但是在执行其他操作之前,您需要检查您的条件。例如,如果您在加载下一个页面之前移动"back“,您将丢失DOM。
此外,back()也可能导致DOM刷新,从而改变元素标识符。如果是这种情况,您需要在每次返回后验证页面,并按索引遍历元素,在单击之前逐个查找它们。
我一直认为更好的做法是对点击操作这样的事情更加严格。单击specific链接,检查specific结果,并在两次操作之间使用等待条件,以确保您处于预期的位置。
更多关于wait conditions here的信息。
https://stackoverflow.com/questions/42964029
复制相似问题