Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在网站的shadowroot(open)中找到First name字段https://www.virustotal.com 使用Selenium和Python_Python_Selenium_Selenium Webdriver_Shadow Dom_Queryselector - Fatal编程技术网

如何在网站的shadowroot(open)中找到First name字段https://www.virustotal.com 使用Selenium和Python

如何在网站的shadowroot(open)中找到First name字段https://www.virustotal.com 使用Selenium和Python,python,selenium,selenium-webdriver,shadow-dom,queryselector,Python,Selenium,Selenium Webdriver,Shadow Dom,Queryselector,我正在尝试在virus total站点上自动注册,并为此在python中使用selenium。但是在通过id获取元素时遇到问题。我被困在这个问题中。任何帮助都将不胜感激。谢谢。 这是我正在尝试的代码 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver =webdriver.Chrome() driver.get('https://www.virustot

我正在尝试在virus total站点上自动注册,并为此在python中使用selenium。但是在通过id获取元素时遇到问题。我被困在这个问题中。任何帮助都将不胜感激。谢谢。 这是我正在尝试的代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver =webdriver.Chrome()
driver.get('https://www.virustotal.com/gui/join-us')
print(driver.title)
search = driver.find_element_by_id("first_name")
search.send_keys("Muhammad Aamir")
search.send_keys(Keys.RETURN)
time.sleep(5)
driver.quit()

如果您查看网站的HTML,您可以看到您的输入字段位于所谓的
#shadowroot

这些shadowroot阻止您使用简单的
find\u element\u by\u id
查找shadowroot中包含的元素。可以通过查找包含要查找的元素的所有父ShadowRoot来修复此问题。在每个shadowroot中,您需要使用javascript的querySelector并查找下一个shadowroot,直到您可以访问您要查找的元素为止

在您的情况下,您需要执行以下操作:

从selenium导入webdriver
从selenium.webdriver.common.keys导入密钥
导入时间
driver=webdriver.Chrome()
司机,上车https://www.virustotal.com/gui/join-us')
打印(驱动程序标题)
#稍等一下,直到表格弹出
时间。睡眠(3)
#使用javascript检索最后一个shadowroot
javascript=“”返回文档
.querySelector('vt-virustotal-app').shadowRoot
.querySelector('join-us-view').shadowRoot
.querySelector('vt-ui-text-input')。shadowRoot“”
shadow\u root=driver.execute\u脚本(javascript)
#找到输入框
search=shadow\u root.按\u id(“输入”)查找\u元素
搜索。发送密钥(“穆罕默德·阿米尔”)
搜索。发送密钥(密钥。返回)
时间。睡眠(5)
driver.quit()
网站中的名字字段位于多个
#影子根(打开)
的深处


解决方案 要将字符序列发送到“名字”字段,您必须使用,并且可以使用以下命令:

  • 代码块:

    from selenium import webdriver
    import time
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get("https://www.virustotal.com/gui/join-us")
    time.sleep(7)
    first_name = driver.execute_script("return document.querySelector('vt-virustotal-app').shadowRoot.querySelector('join-us-view.iron-selected').shadowRoot.querySelector('vt-ui-two-column-hero-layout').querySelector('vt-ui-text-input#first_name').shadowRoot.querySelector('input#input')")
    first_name.send_keys("Muhammad Aamir")
    
  • 浏览器快照:


工具书类 您可以在以下内容中找到一些相关讨论:


这可能会给你更多的信息:发布html代码也是个好主意。@Jonas感谢你的相关帖子。@BelaTamasJozsa我没有共享html代码,因为我提供了该网站的链接,所以我认为共享html代码不是个好主意。