问题标签 [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 投票
3 回答
1199 浏览

python - 循环槽元素(Selenium)时如何解决StaleElementReferenceException

我正在尝试通过网络抓取一个网站以获取有关足球比赛的信息。因此我在 Python 中使用 Selenium 库。

我将所有需要的匹配项中的可点击 html 元素存储在一个名为“completed_matches”的列表中。我创建了一个 for 循环,它遍历所有这些可点击的 html 元素。在循环中,我单击当前的 html 元素并打印新的 URL。代码如下所示:

输出如下所示:

completed_matches 列表包含 159 个 html 元素,但 for 循环仅显示第一个单击的链接,然后抛出 StaleElementReferenceException...

有谁知道如何解决这个问题?

0 投票
0 回答
69 浏览

python - 即使我刷新引用,循环时仍然会收到 StaleElementReferenceException

我正在尝试为 Quizlet 创建一个机器人以获得乐趣,但我在“Match”中遇到了这个问题。本质上,程序应该将图块拖放到其他图块上,以便将它们全部匹配并使它们消失。所有元素已经在 html 中正确排序(所以我只需要匹配列表中的索引 0-1、2-3、4-5、6-7...)。每次它匹配两个元素时,这两个元素就会从 DOM 中消失,所以我猜这就是问题所在。

这是我当前的代码:

每次循环时,我都会再次找到所有元素,所以我不明白为什么它们是陈旧的。

我也尝试反复循环拖放,尽管它​​永远不会结束:

我已经被困了很长时间,所以任何帮助或想法将不胜感激。谢谢!

只是一个简短的更新/碰撞:我还尝试按坐标移动它们,尽管这也不能始终如一地工作(在 1-2 循环后卡住)。检查 html 源代码后,我注意到该类为翻译单元添加了一个新属性,但我不确定这是否会改变任何内容。我还尝试删除匹配后不存在于 html 中的列表部分,但这也无济于事。不确定这是否是关于 Quizlet 的特定内容,或者我是否在概念上遗漏了某些内容。

我现在几乎完全没有想法,所以任何想法都将不胜感激。谢谢!

0 投票
1 回答
150 浏览

python - 访问下拉菜单中的选项时获取“StaleElementReferenceException”

在 Python 和 Selenium 中,我正在填充一个表单,提交它,然后抓取出现在表单下方页面上的生成的多页表。在我抓取了这个表的每一页之后,我重置了表单并尝试重新填充表单。但是,一个下拉菜单会触发代码。

我试图让驱动程序在重置表单后等待下拉菜单重新出现,但这无济于事。我仍然收到在线StaleReferenceElementException错误if option.text == state

如何为下拉菜单中的不同选项反复提交表单?

0 投票
1 回答
279 浏览

java - 如何处理陈旧的元素引用:元素未附加到页面文档

我有一个应用程序,我必须等待页面上显示一个按钮并单击它。该按钮是具有 id="next-arrow-button" 的按钮,但在父 div 上它具有 id="recorder-0"

在此处输入图像描述

按下此按钮后,该按钮将在几秒钟内不再显示。

该按钮再次显示如下: 在此处输入图像描述

您可以看到它具有相同的 id(id="next-arrow-button"),但在父 div 上它有另一个 id(id="recorder- 1 ",在它是 recoder- 0之前)

我等待元素可见并尝试单击它,但出现此错误:

我的代码有点乱,但我想和你分享一个版本:

我试图删除该行:

但我得到同样的错误。

我是初级,如果我犯了一个愚蠢的错误,我很抱歉,但我真的需要你的帮助。谢谢 :)

0 投票
1 回答
258 浏览

python - 通过浏览器向后移动时,即使在刷新后也会出现过时的元素引用异常

我正在尝试制作一个刮板,它将通过一堆链接,将指南导出为 PDF,并循环浏览父文件夹中的所有指南。它可以正常工作,但是当我尝试向后退时,它会抛出陈旧的异常,即使我确保刷新代码中的元素或刷新页面也是如此。

如果我都使用脚本将浏览器移回,就会发生这种情况,或者使用 driver.back() 方法。我可以看到它返回到子目录,然后等待并刷新元素。但是,它似乎无法加载新元素以进入下一个指南。我在 SO 上发现了一个类似的问题,但有人只是提供了针对该问题量身定制的代码而不是解释,所以我仍然感到困惑。

我也知道使用 waitdriver,但我现在只使用睡眠,因为我不完全了解 EC 等待条件。无论如何,增加睡眠时间并不能解决这个问题。

0 投票
1 回答
48 浏览

python - 当我尝试使用 for 循环单击所有链接时,Selenium 显示过时错误?

all_divs 包含我得到的所有链接。我需要单击所有这些但是当我尝试这样做时,硒会抛出陈旧的错误说

“selenium.common.exceptions.StaleElementReferenceException:消息:元素引用已过时;要么元素不再附加到 DOM,它不在当前框架上下文中,要么文档已刷新“

0 投票
1 回答
40 浏览

python - Selenium 遍历元素并在满足特定条件时单击该元素

我正在尝试创建一个网络抓取工具,但遇到了问题。我正在尝试遍历小部件左侧的元素,如果名称以“a”开头,我想单击减号并将其移动到右侧。我设法找到了所有元素,但是,一旦执行了向右移动的元素,就在该循环之后,我收到以下错误。

(会话信息:chrome=80.0.3987.163)

JS 小部件。

0 投票
0 回答
91 浏览

java - Selenium 处理 for 循环中的陈旧元素

我有这样的用户界面:

在此处输入图像描述

我必须选择每个附件并单击以下载或删除。

去下载:

这工作正常,附件将被单击并下载。

但我正面临 detele 测试用例的问题。因为当我点击删除按钮时,会有一个Alert对话框询问“你确定吗”,在我接受对话框后,我得到了StaleElementReferenceException

删除:

这适用于第一个附件,但在我接受 之后Alert,该元素attachement不再附加到 DOM,所以当它循环到第二个单选按钮时,我得到StaleElementReferenceException.

我知道我们必须findElement再次使用 Stale 元素。但由于我有一个for循环列表,我不知道如何处理它。

我怎样才能仍然使用for循环并能够处理陈旧的元素?

0 投票
1 回答
382 浏览

python - Selenium Python - 为什么是 StaleElementReferenceException 而不是 NoSuchElement 以及如何捕捉

我正在编写一段代码来自动化登录过程。该过程包括在第一页填写用户名,单击按钮并进入第二页,我将在其中填写 pw 并按下第二个按钮。该网页有时会看到大量流量,并在单击第一页后给出“稍后再试...”消息。为了解决这个问题,我设置了一个循环来继续点击,直到我们进入下一页。

一旦我进入下一页,我仍然处于 while 循环中。但是,我期待寻找“稍后再试”消息会产生NoSuchElementException并因此中断循环,但我得到了StaleElementReferenceException。我明白,因为我转到另一个页面,所以这个“稍后再试”元素不再存在于 DOM 中。

为什么会引发 StaleElementReferenceException 而不是 NoSuchElementException?如果网页上的流量很低,则不会生成“稍后再试”消息,并且除了 NoSuchElementException 会中断循环。消息一出现,StaleElement。即使我们不将元素存储在变量中,Selenium 是否会跟踪元素的引用?如果是这样,我们如何删除它?

我最初尝试使用except StaleElementReferenceException:来捕获此异常。但什么也没有发生。代码最终点击进入下一页,但继续运行循环,在 StaleElementReferenceException(第 4 行)处中断。我如何捕捉到这个异常?我已经浏览了我认为所有相关的问题,但没有找到有效的答案。

编辑 1 我知道在人们使用的 SO 上找到了不同的示例except StaleElementReferenceException:但是,它在我下面的代码中不起作用。代码一直循环,直到它设法传递到下一页,但随后因过时元素异常而中断。

0 投票
1 回答
35 浏览

python - Python & Selenium:遍历 WebElements 错误列表:StaleElementReferenceException

下午好,

对 Python 和网页抓取有些陌生,因此我们将不胜感激任何帮助!第一的:

编码

问题

我正在使用 Selenium 尝试将家庭学校团体的名称和信息从http://home-school.com/groups/保存到每个州的单个文本文件中。

为此,我保存了一个链接列表,并希望遍历列表以单击每个链接,执行与抓取所需数据、操作文本以及输出到每个状态的单独文本文件相关的任务。

StaleElementReferenceException: stale element reference: element is not attached to the page document在尝试执行“for”循环时得到了。

我相信当它到达时它会给出错误 element = driver.find_element_by_xpath("""/html/body/center/table/tbody/tr/td/table[3]/tbody/tr/td[2]/div""")。据我所知,这个 xpath 没有改变。我假设我需要让 webdriver 等待页面加载,因此 time.sleep(4).

我确信这是一个简单的修复,当我看到它时会很有意义,但此刻我被难住了。你们能提供的任何帮助都会很棒!谢谢!