无法使用 Python Selenium 在 shadow-root(打开)中定位元素

Can't locate elments within shadow-root (open) using Python Selenium

我正在尝试从 https://www.virustotal.com/gui/file/03d1316407796b32c03f17f819cca5bede2b0504ecdb7ba3b845c1ed618ae934/details

获取签名者、副签名者和 X509 签名者下的内容
from selenium import webdriver
op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(executable_path="/Desktop/chromedriver", options=op)
details_url = "https://www.virustotal.com/gui/file/03d1316407796b32c03f17f819cca5bede2b0504ecdb7ba3b845c1ed618ae934/details"

driver.get(details_url)
element = driver.find_element_by_xpath("/html/body/vt-ui-shell")
print(element.text)

结果不包括 Signers、Counter Signers 和 X509 Signers 下的部分

我也试过

driver.find_element_by_xpath("//*[@id="details"]//div/vt-ui-signature-info//vt-ui-expandable/span")

找到那个部分,但它最终给了我

NoSuchElementException: Message: no such element: Unable to locate element
element=driver.execute_script(
    "return document.querySelector('body file-view').shadowRoot.querySelector('vt-ui-file-details').shadowRoot.querySelector('vt-ui-signature-info').shadowRoot.querySelector('vt-ui-expandable').shadowRoot.querySelector('[class=\"details\"]')")

这会打印签名版本信息,同样你必须找到 rool 并调用 shadowroot 并找到其他根的元素

https://bitsofco.de/what-is-the-shadow-dom/

阴影 dom 不是文档的一部分,因此您必须使用 javascript 执行程序在其中查找元素

Signers 字段,例如Microsoft Windows 在嵌套 .


解决方案

要提取文本 Microsoft Windows,您必须使用 and you can use the following :

  • 代码块:

    driver.get('https://www.virustotal.com/gui/file/03d1316407796b32c03f17f819cca5bede2b0504ecdb7ba3b845c1ed618ae934/details')
    print(driver.execute_script("return document.querySelector('file-view').shadowRoot.querySelector('vt-ui-file-details').shadowRoot.querySelector('vt-ui-signature-info').shadowRoot.querySelector('vt-ui-expandable-detail').shadowRoot.querySelector('slot')").text)
    
  • 控制台输出:

    Microsoft Windows
    

参考资料

您可以在以下位置找到一些相关讨论: