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

2024-05-31 23:41:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下典型的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根的内部文本,但是它总是返回null,我知道open和closed shadow DOM之间的区别,并且shadow DOM的开放版本在我的Devtool中总是显示为#shadow root(open),所以我想知道如何判断这个用户代理shadow DOM是打开的还是关闭的?在

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

^{pr2}$

文本返回为空。在


Tags: 代码文本dividinputhtmlrootopen
2条回答

根据@FlorentB。建议

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

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

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

相关问题 更多 >