Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单击网站上的所有链接并执行操作。元素引用已过时_Python_Python 2.7_Selenium_Selenium Webdriver - Fatal编程技术网

Python 单击网站上的所有链接并执行操作。元素引用已过时

Python 单击网站上的所有链接并执行操作。元素引用已过时,python,python-2.7,selenium,selenium-webdriver,Python,Python 2.7,Selenium,Selenium Webdriver,我制作新脚本,我要单击()网站上所有列出的链接,查找内容,返回列出的链接,单击()下一个链接,查找内容,返回列出的链接 我从网站开始,该网站为我列出了一些链接: 链接1 链接2 链接3 等 但是我的脚本只检查一个链接,当返回到列出的链接时,打印我错误: selenium.common.exceptions.StaleElementReferenceException:消息:元素引用已过时。元素不再附加到DOM,或者页面已刷新 on line: for link in links: lin

我制作新脚本,我要单击()网站上所有列出的链接,查找内容,返回列出的链接,单击()下一个链接,查找内容,返回列出的链接

我从网站开始,该网站为我列出了一些链接:

链接1 链接2 链接3 等

但是我的脚本只检查一个链接,当返回到列出的链接时,打印我错误:

selenium.common.exceptions.StaleElementReferenceException:消息:元素引用已过时。元素不再附加到DOM,或者页面已刷新

on line:
for link in links:
    link.click() <----
在线:
对于链接中的链接:
link.click()有几件事:

不要使用“睡眠”之类的延迟来同步。改用“等待”条件

由于您使用的是“back()”,因此只有在成功移出上一页时,您才会希望这样做,这也是最好专门测试操作的原因之一——例如,您如何知道每次单击()都会使您“前进”,可能涉及到其他一些操作。在这里,您正在对DOM进行假设,这是可以的,但是在执行其他操作之前,您需要检查您的条件。例如,如果在加载下一页之前将“向后”移动,则将丢失DOM

另外,back()可能会导致DOM刷新,从而更改元素标识符。如果是这种情况,那么您需要在每次返回后验证页面,并按索引遍历元素,在单击之前逐个查找它们

我总是发现对点击操作这样的事情更加严格是更好的做法。单击specific链接并检查specific结果-并在操作之间使用等待条件,以确保您准确到达预期位置


更多信息。

为什么等待()比睡眠()好?我不知道如何单击()所有链接:)你能给我举个例子吗?这和谷歌搜索和点击所有结果是一样的。为我的错误道歉english@PythonLearn-您希望在睡眠期间使用
wait()
的原因是它不会影响正在运行代码的线程;您只是告诉您的
驱动程序
对象“稍等片刻”。当您使用
睡眠
时,您正在使线程进入睡眠状态。这可能会导致异常情况,并减慢测试的执行时间。“睡眠”不能保证满足所需的条件。它只是推迟了事情的发生。所有测试操作都应该有预期的结果,并且“等待”允许您等待所有加载、呈现和内容完成。等待会超时,以防发生错误。测试时,请使用“”not sleep,条件是否满足。如果没有,你需要检查页面是否改变。真的没有例子吗?也许在新标签中打开所有链接?对不起,我不是Python程序员;我对Selenium web驱动程序和运行浏览器测试场景有丰富的经验。不管怎么说,这真的是一种哲学——因为等待和排序的细节在不同的场景中是不同的。有关Python中的“等待条件”的详细信息,请参见提供的链接-其中有很多!
on line:
for link in links:
    link.click() <----