标有 ==$0 的硒重复元素

Posted

技术标签:

【中文标题】标有 ==$0 的硒重复元素【英文标题】:Selenium Duplicate Elements marked with ==$0 【发布时间】:2019-10-16 19:08:48 【问题描述】:

如何处理 selenium 中的重复元素,其中重复元素用==$0 标记?

转到 www.google.com 并搜索 google 搜索按钮,我已经尝试过迭代器和创建列表,但是,这是处理 ==$0 的正确方法

driver.findElements(By.xpath("//input[@aria-label='Google Search']"));

我想选择第二个元素。

【问题讨论】:

【参考方案1】:

您想要单击的可见按钮是具有“FPdoLc VlcLAe”类的 div 的后代,因此您可以使用

选择它
driver.findElements(By.xpath("//div[@class='FPdoLc VlcLAe']//input[@name='btnK']"));

不可见的是具有 class= "VlcLAe" 但没有 "FPdoLc" 的 div 的后代,所以这就是区别。

【讨论】:

【参考方案2】:

您在使用 //input[@aria-label='Google Search']

时获得了两个值

一种可能的解决方案是使用:(//input[@aria-label='Google Search'])[2](实心括号中的值,即 2 应该没有空格)

例如 - driver.findElement(By.xpath("(//input[@aria-label='Google Search'])[ 2 ]"); //(实心括号中的值,即2应该没有空格)

【讨论】:

【参考方案3】:

$0 - $4

$0$1$2$3$4 是对在 google-chrome-devtools 的“元素”面板中检查的最后五个 DOM 元素的历史引用或在“配置文件”面板中选择的最后五个 javascript 堆对象$0 返回最近选择的元素或 JavaScript 对象,$1 返回第二最近选择的元素,以此类推。


在您的用例中,您已经通过元素面板检查了 Google 搜索 按钮。因此,在控制台抽屉中,$0 已被评估并显示与以下相同的元素:


更多关于您的用例的信息将有助于我们以更好的方式回答您的问题。但是,html DOM 中的每个元素都可以使用css-selectors 或xpath 唯一标识。

如果您的用例是Google 搜索任何特定的术语/短语,您可以使用以下解决方案:

WebElement searchField = driver.findElement(By.name("q"));
searchField.sendKeys("user3245610");
searchField.sendKeys("Keys.RETURN");

您可以在How to click a random link from google search results through Selenium and Python找到详细的相关讨论

【讨论】:

以上是关于标有 ==$0 的硒重复元素的主要内容,如果未能解决你的问题,请参考以下文章

提交元素不可点击的硒python

python中的硒:NoSuchElementException:消息:没有这样的元素:无法找到元素

如何单击一个我看不到它的元素的硒框?

使用Python中的硒,单击网页上的“下一步”按钮

请使用json逐步解释基本的硒配置[关闭]

在n个元素中随机挑选k个不重复元素,该怎么选