如何解决使用 selenium 和 CSS 查找 shadow DOM 文本
我正在尝试从保存在 shadow DOM 中的输入字段中查找输入文本:
driver.find_element_by_css_selector("#my_id div:nth-of-type(2)").text
但它没有帮助。 HTML部分
<input _ngcontent-c21="" class="clr-input ng-untouched ng-pristine ng-valid" id="my_id" name="my_id" placeholder="My placeholder namespace" size="40" type="text">
#shadow-root {user-agent}
<div pseudo="-webkit-input-placeholder" id="placeholder" style="display: none !important;">My placeholder namespace</div>
<div>Text I need to find</div>
也尝试过,但运气不佳:
shadow_section = driver.execute_script('''return
document.querySelector("#my_id").shadowRoot''')
print(shadow_section.find_element_by_css_selector("div:nth-of-type(2)").text)
在这种情况下,在 shadow DOM 中查找元素的最佳方法是什么? 在我的情况下,定位器应该链接到元素。
更新:正如我所建议的那样:
shadow_root = driver.execute_script('return arguments[0].shadowRoot',driver.find_element_by_css_selector("#my_id"))
shadow_root_element = shadow_root(driver.find_element_by_css_selector('div:nth-child(2)'))
但是收到了:
TypeError: 'NoneType' object is not callable
在 shadow_root_element
行。
解决方法
element=driver.execute_script(
"return document.querySelector('#my_id').shadowRoot.querySelector('div:nth-child(2)')")
你必须使用执行脚本来找到影子根,元素将有你想要的项目。您现在可以使用 element.text 来获取文本
,我无法找到带有 Javascripts .shadowRoot 选项的解决方案,对我来说为什么它不起作用是个谜。 这个选项工作得很好。它输入文本:
driver.find_element_by_css_selector("#my_id").get_attribute("value")
或
driver.find_element_by_id("my_id").get_attribute("value")
我仍然对 PDHide 提出的方法很感兴趣。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。