相关疑难解决方法(0)

如何判断元素是否在shadow DOM中?

我有一个项目,我在本地使用shadow DOM(不是通过polyfill).我想检测一个给定element是否包含在shadow DOM或light DOM中.

我已经查看了元素上的所有属性,但似乎没有根据元素所在的DOM类型而有所不同.

如何确定元素是影子DOM还是轻型DOM的一部分?


以下是针对此问题的"shadow DOM"和"light DOM"的示例.

 (light root) • Document
      (light)   • HTML
      (light)   | • BODY
      (light)   |   • DIV
(shadow root)   |     • ShadowRoot
     (shadow)   |       • DIV 
     (shadow)   |         • IFRAME 
 (light root)   |           • Document
      (light)   |             • HTML
      (light)   |             | • BODY
      (light)   |             |   • DIV
(shadow root)   |             |     • ShadowRoot
     (shadow)   |             |       • DIV
       (none)   |             • [Unattached DIV of second Document]
       (none)   • [Unattached …

javascript html5 css-selectors shadow-dom

28
推荐指数
5
解决办法
4138
查看次数

检查元素是否包含#shadow-root

是否可以查看Shadow DOM元素是否存在?我并不太关心操纵它,甚至不是真的瞄准它.我理解封装的原因.但是我希望能够根据Shadow DOM元素是否存在来设置常规DOM中的其他元素.

有点像:

if ( $('#element-id #shadow-root').length ) {
    // true
}
Run Code Online (Sandbox Code Playgroud)

或者如果不是阴影根,至少是一个特定的元素,比如div的id.因此,如果该div存在,那么很明显Shadow DOM元素在页面上.

我知道这不会那么简单......从我做过的一些研究中,有些事情就像这样>>>,/deep/但他们的支持似乎很低/没有/弃用.购买也许还有另一种方式,不管它有多么优雅?

javascript css shadow-dom

12
推荐指数
2
解决办法
6927
查看次数

访问shadow DOM中的元素

是否可以使用python-selenium 在Shadow DOM中找到元素

用例示例:

我有这个inputtype="date":

我想点击右边的日期选择按钮,然后从日历中选择一个日期.

如果您要检查Chrome开发者工具中的元素并展开日期输入的影子根节点,您会看到该按钮显示为:

<div pseudo="-webkit-calendar-picker-indicator" id="picker"></div>
Run Code Online (Sandbox Code Playgroud)

屏幕截图演示了它在Chrome中的外观:

在此输入图像描述

按ID查找"选择器"按钮会导致NoSuchElementException:

>>> date_input = driver.find_element_by_name('bday')
>>> date_input.find_element_by_id('picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用::shadow/deep/定位器的建议在这里:

>>> driver.find_element_by_css_selector('input[name=bday]::shadow #picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
>>>
>>> driver.find_element_by_css_selector('input[name=bday] /deep/ #picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
Run Code Online (Sandbox Code Playgroud)

请注意,我可以通过向其发送密钥来更改输入中的日期:

driver.find_element_by_name('bday').send_keys('01/11/2014')
Run Code Online (Sandbox Code Playgroud)

但是,我想通过从日历中选择日期来具体设置日期.

javascript python selenium selenium-webdriver shadow-dom

9
推荐指数
2
解决办法
5408
查看次数