【问题标题】:How to tell if user agent Shadow Dom is open or closed?如何判断用户代理 Shadow Dom 是打开还是关闭?
【发布时间】:2018-07-05 05:30:18
【问题描述】:

我有以下典型的shadow dom html代码:

<input is="text-input" class="input-element style-scope paper-input" 
autocomplete="off" placeholder="" autocapitalize="none" autocorrect="off" 
aria-describedby="" aria-labelledby="paper-input-label-22" id="input-22" 
tabindex="0">
   #shadow-root (user-agent)
   <div id="inner-editor">test</div>
</input>

我正在使用 Selenium 尝试获取 shadow root 中的文本,但它总是返回 null,我知道打开和关闭 shadow DOM 之间的区别,并且 Shadow dom 的开放版本总是显示为#shadow-我的 Devtool 中的 root (打开),所以我想知道如何判断这个用户代理影子 dom 是打开还是关闭?

编辑:我正在使用 JS,我的代码如下所示:

driver.executeScript("return 
    arguments[0].shadowRoot",driver.findElement(webdriver.By.css("#input-
    22"))).then(function(text) { text.getText()});

文本返回为空。

【问题讨论】:

  • 您有可以链接的公开示例吗?我想尝试一下。
  • 我不知道,这是我正在编写测试的项目的一部分。我会毫无问题地访问标记为 (open) 的 shadow-root,但是对于 (user-agent) 它们总是返回为 null,这让我认为它们是封闭的影子 DOM。
  • 了解...您知道我们可以看到的任何可能采用这种格式的公共/示例页面吗?
  • 也许这个页面是相关的:stackoverflow.com/questions/38701803/…
  • 我正在使用 JS。当我尝试使用这种代码时,它返回 null,这就是为什么我怀疑它是一种封闭的影子 DOM 与开放,我也对其进行了测试并且它有效。所以user-agent shadow DOM是浏览器自己创建的,此时无法访问。

标签: python html selenium shadow-dom


【解决方案1】:

根据@FlorentB。建议,

driver.findElement(By.css("#input-22")).getAttribute("value"‌​) 

将返回用户代理影子根的文本值。

【讨论】:

    【解决方案2】:

    你可以通过查看根元素的innerHTML是否为空来判断,看这个例子

    import selenium
    from selenium import webdriver
    driver = webdriver.Chrome()
    from bs4 import BeautifulSoup
    
    
    def expand_shadow_element(element):
      shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
      return shadow_root
    
    driver.get("chrome://settings")
    root1 = driver.find_element_by_tag_name('settings-ui')
    
    html_of_interest=driver.execute_script('return arguments[0].innerHTML',root1)
    sel_soup=BeautifulSoup(html_of_interest, 'html.parser')
    sel_soup# empty root not expande
    
    shadow_root1 = expand_shadow_element(root1)
    
    html_of_interest=driver.execute_script('return arguments[0].innerHTML',shadow_root1)
    sel_soup=BeautifulSoup(html_of_interest, 'html.parser')
    sel_soup
    

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2021-10-28
      • 1970-01-01
      • 2017-02-05
      相关资源
      最近更新 更多