如何判断用户代理Shadow Dom是打开还是关闭?

问题描述 投票:3回答:2

我有以下典型的影子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尝试将文本放在阴影根目录中,但它总是返回null,我知道开放阴影DOM和封闭阴影DOM之间的差异,并且阴影dom的开放版本始终显示为#shadow-root(打开) )在我的开发工具中,所以我想知道如何判断这个用户代理阴影dom是打开还是关闭?

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

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

文本返回null。

python html selenium shadow-dom
2个回答
3
投票

按照@FlorentB。顾名思义,

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

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


1
投票

您可以通过查看根元素的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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.