我正在尝试使用Java和Selenium进行网页抓取,但对于网页抓取所需的一部分,它需要我访问一个影子DOM元素。我正在使用Javascript执行器访问它,我正在输入检索我正在寻找的内容所需的querySelector片段,但我得到了一个"无法读取null的属性(读取'ShadowRoot')"错误。有人熟悉这个错误以及如何解决它吗?
下面是我的代码片段:
String pagePdfUrl = (String) js.executeScript("document.querySelector('pdf-viewer').shadowRoot.getElementById('content').querySelector('embed').getAttribute('original-url')");
js是Javascript执行程序变量。
谢谢大家!
3条答案
按热度按时间jfgube3f1#
当使用 querySelector() 读取ShadowRoot时,此错误消息...
.意味着下列情况之一:
溶液
在第一种和第二种情况下,您将无法访问 ShadowRoot。在第三种情况下,您需要等待一段时间,例如
time.sleep(3)
,然后才能尝试访问 ShadowRoot 及其元素。nbewdwxp2#
线程休眠(10);对我来说很好。
我仍然看到另一个阴影元素出现同样的错误
有时影子DOM查询选择器(“q2-input”);可能改变了它的位置。
因此,如果错误仍然存在,请检查完美的JSPath并在控制台中进行验证
fjnneemd3#
在Selenium 4.0中,对于Chromium 96以上版本,您可以使用
getShadowRoot()
方法并完全避免JavaScript。工作示例:
来源:https://titusfortner.com/2021/11/22/shadow-dom-selenium.html