当前位置: 首页 > 知识库问答 >
问题:

Java Selenium无法使用找到DOM中的所有元素。xpath(“//*”)

冯福
2023-03-14

我有一个奇怪的场景,在这个场景中我无法找到DOM中的所有元素。

当通过Firefox/“Inspect Elements”查看DOM时,我清楚地看到一些“div”元素,这些元素不在Java/Selenium生成的元素列表中:

List<WebElement> elements = webDriver.findElements(By.xpath("//*"));

我怀疑上面的行没有提供任何元素,这些元素是不可见元素的子元素。

如果我的怀疑不正确,那么谁能解释一下我看到的原因?

否则,如果情况确实如此,那么唯一的解决方法就是检查所有不可见的元素并使它们可见。

有没有更好的办法来处理这个问题?

如果是-是什么?

如果否-如何使所有元素可见(可能使用JavascriptExecutor)?

谢谢

共有3个答案

席俊达
2023-03-14

发现的问题:

当我通过火狐/检查元素查看网页时,窗口被最大化了。

当我用Java/硒刮网页时,窗口没有最大化。

在我正在处理的特定网页中,当窗口达到一定大小时(可能有一些javascript代码在客户端运行,这是由客户端负责的),就会添加一些元素(大部分是广告)(成为“未隐藏”)。

目前的问题不在Selenium范围内。

为了解决这个问题,只需添加以下行:

网络驱动程序。管理()。window()。最大化();

尉迟边浩
2023-03-14

我建议使用一个单独的超文本标记语言解析器库来获取所有html文档节点所需的信息。举个例子

  1. 获取完整的页面源,使用driver.getPageSource();
  2. 使用http://jsoup.org或任何其他解析器来解析文档并提取所需的数据

这里有一个例子:

   String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
   Document doc = Jsoup.parse(html);
   Element link = doc.select("a").first();

   String text = doc.body().text(); // "An example link"
   String linkHref = link.attr("href"); // "http://example.com/"
   String linkText = link.text(); // "example""

   String linkOuterH = link.outerHtml(); 
    // "<a href="http://example.com"><b>example</b></a>"
   String linkInnerH = link.html(); // "<b>example</b>"

我想补充一点,通过WebDriver查询所有元素的操作非常慢。我在我的宠物项目“页面记录器”中遇到过这个问题
解决方案是使用HtmlAgilityPack–。NET HTML解析器-用于在所有文档节点上执行操作。

商俊智
2023-03-14

另一个选项是元素位于框架中。在这种情况下,您必须调用webDriver。切换到()。帧(字符串名称)。不要忘了在之后切换回来,最好是使用webDriver。切换到()。defaultContent()。

我认为硒也可以接触到不可见的元素。我一直在接触一些我自己看不见的元素。但你不能与他们互动。

当然,正如Dmitry所建议的那样,以这种方式获取所有元素确实不是一种可行的方法。

 类似资料:
  • 我无法使用XPATH和CSS找到元素

  • 问题内容: 我有3个div。 像这样: 他们将充满文字。我不确定多少。问题是,所有高度都必须相等。 我如何使用jQuery(或CSS)查找DIV最高的并将其他两个设置为相同的高度,从而创建3个相等高度的DIV。 这可能吗? 问题答案: 您不能轻松地通过高度选择或在CSS中进行比较,但是jQuery和一些迭代应该可以轻松解决此问题。我们将遍历每个元素并跟踪最高的元素,然后再次遍历并将每个元素的高度设

  • 问题内容: 我有一个工作脚本,可以使用selenium登录到站点,如下所示: script.py 通过以下方式在安装了Firefox的 亚马逊Ubuntu盒子 上运行该脚本: 我得到的错误是: selenium.common.exceptions.NoSuchElementException:消息:u’无法找到元素:{“ method”:“ id”,“ selector”:“ content”}’

  • 我尝试使用Python selenium(新的)做一些自动化。不幸的是,检查特定网页的元素不仅仅是困难的。没有id可以使用,我尝试xpath。我想选择一个下拉列表,我检查这个元素,然后复制xpath,它是//*[@id="frmMain:purchase_criteria_tab"]/div[13]/div[1]/div/按钮 我的代码是: 我不明白这个元素有什么想法吗?提前谢谢你。

  • 元素的HTML为: 来自Firebug的X路径: