我有一个奇怪的场景,在这个场景中我无法找到DOM中的所有元素。
当通过Firefox/“Inspect Elements”查看DOM时,我清楚地看到一些“div”元素,这些元素不在Java/Selenium生成的元素列表中:
List<WebElement> elements = webDriver.findElements(By.xpath("//*"));
我怀疑上面的行没有提供任何元素,这些元素是不可见元素的子元素。
如果我的怀疑不正确,那么谁能解释一下我看到的原因?
否则,如果情况确实如此,那么唯一的解决方法就是检查所有不可见的元素并使它们可见。
有没有更好的办法来处理这个问题?
如果是-是什么?
如果否-如何使所有元素可见(可能使用JavascriptExecutor)?
谢谢
发现的问题:
当我通过火狐/检查元素查看网页时,窗口被最大化了。
当我用Java/硒刮网页时,窗口没有最大化。
在我正在处理的特定网页中,当窗口达到一定大小时(可能有一些javascript代码在客户端运行,这是由客户端负责的),就会添加一些元素(大部分是广告)(成为“未隐藏”)。
目前的问题不在Selenium范围内。
为了解决这个问题,只需添加以下行:
网络驱动程序。管理()。window()。最大化();
我建议使用一个单独的超文本标记语言解析器
库来获取所有html文档节点所需的信息。举个例子
driver.getPageSource();
这里有一个例子:
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解析器-用于在所有文档节点上执行操作。
另一个选项是元素位于框架中。在这种情况下,您必须调用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路径: