无法使用 Python Selenium 在 shadow-root(打开)中定位元素
Can't locate elments within shadow-root (open) using Python Selenium
获取签名者、副签名者和 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
参考资料
您可以在以下位置找到一些相关讨论:
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,您必须使用
代码块:
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
参考资料
您可以在以下位置找到一些相关讨论: