【发布时间】:2021-06-03 15:05:16
【问题描述】:
我正在尝试从保存在 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 行。
【问题讨论】:
-
无法查询
user-agentshadowRoots。这些是浏览器特定的实现。所以 Safari 中的 HTML 可能 不同于 Chrome 或 FireFox 中的 HTML。如果尝试在 F12 Elements 中编辑它(双击).. 你不能。 -
非常感谢。我很难理解。
标签: python html selenium selenium-webdriver shadow-dom