问题标签 [staleelementreferenceexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
420 浏览

c# - Selenium 无法捕获 StaleElementReferenceException

我特别询问我的try/catch块可能存在什么问题,这在与此“重复”链接的问题中没有描述。

我遇到了一个问题,我试图捕获 aStaleElementReferenceException然后再次查找元素,但由于某种原因,异常没有被捕获。我有下面的方法,当我运行测试时,我得到一个StaleElementReferenceException当这条线被执行时,value = element.GetAttribute(attributeName);. 我假设(可能很糟糕)在 a 中添加检查try/catch并专门寻找异常将允许我继续尝试,直到 selenium 能够再次找到该元素。问题是由于某种原因异常没有被捕获并且测试立即退出。奇怪的是,如果我将 catch 块更改为只捕获一般Exception情况,它就可以正常工作。我对此担心的是,尽管我可能会陷入永远不会退出的循环。我正在使用页面对象模型来初始初始化元素。

这是堆栈跟踪的一部分:

测试失败并出现错误:System.Reflection.TargetInvocationException:调用目标已引发异常。---> OpenQA.Selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document (Session info: chrome=71.0.3578.98) (Driver info: chromedriver=2.43.600210 (68dcf5eebde37173d4027fa8635e332711d2874a),platform=Windows NT 10.0 .17134 x86_64) 在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary 2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary2 parameters) 在 OpenQA.Selenium.Remote.RemoteWebElement.GetAttribute(String attributeName)

0 投票
1 回答
484 浏览

java - 获取文本中的 StaleElementReferenceException

我已经尝试了所有可用的解决方案

我有应用程序,我需要单击所有项目并获取项目名称的文本我得到过时的元素引用异常。我试图用不同的方法来解决它,但没有任何效果。

此代码用于 click1 方法

0 投票
2 回答
421 浏览

python - 无法修复 StaleElementReferenceException(未附加到文档的元素)

我目前正在尝试做一些 Selenium 网络抓取,但我一直遇到这个错误:

StaleElementReferenceException:消息:过时的元素引用:元素未附加到页面文档

该代码应该在http://www.grownjkids.gov/ParentsFamilies/ProviderSearch上不断单击结果的下一个按钮 (">") 并在循环中从每个页面中抓取结果。它会在几页上正确执行此操作,但会偶尔在随机页面上失败,但上述异常除外。

我已经查看了许多具有类似问题的 StackOverflow 帖子,并尝试了一些建议的修复,例如使用 WebDriverWait 类来实现显式等待,使用 try/except 块循环并使用 driver.find_element 重新查找元素...在发生 StaleElementReferenceException 的情况下使用方法,并尝试两者

driver.find_element_by_id

driver.find_element_by_xpath。

下面是我的代码:

我有预感将 WebDriverWait 增加到 2000 并且循环 100 次尝试并没有真正起作用(也许它不会进入那个块?)因为无论我增加多少结果都是一样的。对我的代码的任何反馈也很感激,因为这是我第一次使用 Selenium,而且我对 python 也很陌生。

0 投票
2 回答
366 浏览

python - 使用“下一步”按钮单击 Selenium Web 抓取会导致重复值

我正在使用 selenium 和 BeautifulSoup 从网站(http://www.grownjkids.gov/ParentsFamilies/ProviderSearch)中使用下一步按钮来抓取数据,我正在循环单击该按钮。我之前一直在与 StaleElementReferenceException 作斗争,但通过循环重新查找页面上的元素来克服这个问题。但是,我遇到了一个新问题-它现在可以一直单击到最后。但是当我检查它写入的 csv 文件时,即使大部分数据看起来不错,但通常会有 5 批重复的行(这是每页显示的结果数)。

我的意思的图片示例:https ://www.dropbox.com/s/ecsew52a25ihym7/Screen%20Shot%202019-02-13%20at%2011.06.41%20AM.png?dl=0

我有一种预感,这是因为我的程序每次尝试查找下一个按钮时都会重新提取页面上的当前数据。我很困惑为什么会发生这种情况,因为据我了解,实际的抓取部分只有在您跳出内部 while 循环后才会发生,该循环试图找到下一个按钮并进入较大的按钮。(如果我没有正确理解这一点,请告诉我,因为我对这些东西比较陌生。)

此外,我每次运行程序后输出的数据都是不同的(考虑到错误,这是有道理的,因为过去,StaleElementReferenceExceptions 发生在零星的位置。如果每次发生此异常时它都会重复结果,那么对于重复也会偶尔发生。更糟糕的是,每次我运行程序时都会跳过不同批次的结果 - 我交叉比较了来自 2 个不同输出的结果,并且有一些结果出现在一个而不是其他。

任何事情都会有帮助!如果您对我使用 selenium/BeautifulSoup/python 的方式有其他建议,以便改进我未来的编程,我将不胜感激。

非常感谢!

0 投票
1 回答
181 浏览

python - 我在哪里弄错了我的显式等待 | 预期条件 | wait.until 语法?

我用 sys.argv 修复了我之前的问题(取决于 .cmd 文件如何调用脚本)。

现在我遇到了另一个麻烦:

我阅读了很多关于此的内容,但我仍然对如何处理它感到困惑。

我的代码很简单:

有时我得到:

而有时 :

所以我有兴趣检查两者是否都存在(可见???)。

我试图实现一个简单的:

但我仍然遇到同样的错误。

问题#1:我使用正确的语法吗?

问题#2:这是否可以与两个元素都需要有一个谓词[0]的事实联系起来(如果是的话,我如何在presence_of_element_located中指定谓词)?

谢谢你的帮助!;-)


编辑

这是我的代码。

我有一个设置文件“test.txt”,它只包含:

我有一个 .cmd 文件,其中仅包含:

我有一个测试脚本“test.py”:

0 投票
0 回答
261 浏览

python - python:selenium,多次提交表单

我想在此站点https://nhqrnet.ahrq.gov/inhqrdr/data/submit上提交表格以获取所有可能的组合并下载所有 excel 文件。我的代码在一次迭代中成功运行,但是一旦进入第二次迭代,它就会返回下面提到的错误。

我的代码:

错误信息如下:

0 投票
1 回答
143 浏览

python - 无法在 Python 中使用 Selenium 点击过时的元素

我想先说这个问题,我已经查看了有关该主题的所有其他问题并尝试实施解决方案,但仍然没有成功。我正在尝试单击 Quora 上推荐屏幕中的加号按钮:

Quora 推荐屏幕

这是我的代码:

在等待页面加载后,它会获取所有加号元素的列表,然后通过并尝试单击它们。我很确定它仍然可以获取正确的元素,因为此代码曾经可以正常工作,直到它随机开始收到此错误消息:

在这一点上,我完全不知道如何解决这个问题。

0 投票
1 回答
1510 浏览

java - 陈旧元素的 JSON 状态映射 - Selenium 和 Java

我编写了一个脚本并收到了一个过时的元素错误。我知道问题出在哪里,但我不知道如何修复脚本。

我正在编写一个脚本来通过 FireFox 执行以下操作:1),启动 google.com,2),输入“pluralsight”,3),提交,4),单击图像链接。

除了选择图像链接之外,我能够执行每个步骤。当我检查错误时,看起来 ide 正在搜索位于谷歌主页上的图片链接,而不是在谷歌上搜索后出现的图片链接(我希望这是有道理的)。这是脚本:

脚本和错误的快照

我很感激帮助。谢谢!

0 投票
2 回答
80 浏览

python - 如何通过Python使用Selenium单击联赛列表中的每个项目时防止StaleElementReferenceException

本网站操作:https ://www.livetulokset.com/

代码点击列表中的第一个联赛,然后点击足球图标返回主页。尝试单击列表中的第二个联赛时,由于页面刷新而发生 StaleElementReferenceException。如何防止这种情况发生?

编辑:

我真的需要在 for 循环期间不丢失 web 元素的解决方案。这个足球网站只是为了让你们在行动中测试我的问题。

0 投票
0 回答
78 浏览

python-3.x - StaleElementReferenceException 仅在 ActionChains / Python3、Selenium 中发生

我正在尝试使我必须进行特定交易的公司网站自动化。如果我想一次进行一笔交易而不是批量交易,我需要提交一笔交易,然后重新加载网页以提交另一笔交易。不幸的是,我需要单击以选择我的交易的按钮非常通用,并且只有一个索引来引用我希望交易的对象(我不知道之前的索引,它们会随着时间而变化)。因此,我必须在附近找到另一个特定元素并使用 ActionChains 进行偏移单击。不幸的是,我无法使用 find_element_by _link_text 因为可能有几个相同的名称占用不同的日期。因此,我需要使用包含日期和名称的特定 XPATH。

这是我需要使用然后偏移的 XPATH,因为这是我可以使用我的特定 XName 和 XDate 找到的所有内容。

如果我两次运行以下代码,它将在第一次尝试时起作用。第二次它会给出邪恶的 StaleElementReferenceException。

如果我运行上面的代码一次,然后下面的代码可以找到没有问题的元素,甚至单击链接。可悲的是,这个点击的链接是我要偏移的链接,而不是我的最终目标,即左侧 75 像素。

我正在使用新标签进行故障排除。我还没有改回代码。

我希望能够使用不同的变量多次运行我的 two4one() 函数,但不幸的是,当我使用 ActionChains 时,它似乎会导致 StaleElementReferenceException。我仍然可以使用 browser.find_element() 找到元素,但动作链却找不到。我什至制作了一个变量来插入在我的 AC 代码之前打印的 AC,它会打印得很好,然后一旦遇到 AC 代码就会抛出错误。

老实说,我已经尝试了很多不同的东西,比如强制循环。WebDriverWait 立即抛出异常,而不是实际等待元素出现。老实说,我不知道如何使这项工作。

编辑:

列为重复的修复不起作用。据我所知,PageFactory 在 Python 中不可用。PageFactory 链接用于 Java。另一个“修复”不起作用,因为 WebDriverWait 实际上并没有等待。我还没有收到超时错误。一旦我的代码到达这一行

它抛出 StaleElementReferenceException 并且在给我异常之前没有等待 10 秒。这让我感到困惑。我可以找到没有问题的元素

但是一旦我尝试另一种方法来查找元素,甚至使用 browser.find_element() 代码中的元素,它就会立即过时。

编辑:我找到了解决方法。我只是遍历交易列表,它仍然符合我想要的。我创建了一个计数器,它将每次迭代相加,然后与我需要单击的按钮的索引相对应。然后我使用 XPATH 中的计数器值来确定我需要单击的按钮。

希望这是有道理的。ActionChains 不想工作有点烦人。出于某种原因,我认为迭代需要更长的时间,但它们似乎更快。我昨天尝试了我的程序,但把我的输入搞砸了。哎呀。