[英]How to edit #shadow-root (user-agent) value in selenium with Python
[英]How to read text that is under #shadow-root (user-agent)
您可以使用driver.execute_script
注入返回 ShadowRoot 的 JavaScript 代码,然后使用find_element
获取您正在寻找的影子根的子元素。
input_shadow = driver.execute_script('''return document.querySelector("$1").shadowRoot''')
div_text = inputShadow.find_element_by_tag_name("div").text
$1 - Your element's identifier or selector
。
如果您热衷于使用 xpath 查找元素
input_shadow = driver.execute_script('''return $x(\"//*/p-calendar/span/input\")[0]''')
div_text = inputShadow.find_element_by_tag_name("div").text
根据@hayatoito
(Shadow DOM 的创建者)的评论:
引入封闭影子树的最初动机是
"Never allow an access to a node in a closed shadow tree, via any APIs, from outside"
,AFAIK。 像这样,我们无法访问 Blink 中<video>
元素中使用的内部隐藏阴影树中的节点。
其实我就是这样设计了一个封闭的影子树的。 如果有一种方法可以访问封闭阴影树中的节点,则应将其视为规范的错误。
我认为拥有一个 API 来允许在 Chrome 应用程序或扩展程序层中进行访问是完全可以的。 但是,对于普通的网络应用程序,我认为当前的协议是
"Never allow it"
。
如果我们允许,这意味着我们不需要封闭的影子树。 我认为只要有一棵开放的影子树就足够了。
Furhter @Supersharp
在他自己的回答下面的评论中,在讨论中如何使用 JavaScript 获取用户代理影子根中的元素? 提到:
#shadow-root (user-agent)
是浏览器供应商的本地实现,因此它们没有记录并且永远无法访问。 根据规范,只有开放的 Shadow DOM
近日,@AutomatedTester [David Burns,Mozilla Corporation 首席培根官]发起了一场关于WebDriver - Web 组件的可测试性的讨论
目前, Selenium 团队开放接受相同的拉取请求。
您可以在以下位置找到一些相关的详细讨论:
在这里您可以找到有关如何使用 selenium 自动化 shadow DOM 元素的相关讨论?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.