如何通过selenium python填写Web表单

lmyy7pcs  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(193)

有个网站:https://www.nealthy.com/alpha(不是广告),而且它有一个输入姓名和邮件的表单,那就好了,但这个表单是动态的东西,因为当我试图搜索一个项目来输入姓名/邮件时:

driver.find_element(By.XPATH, '//*[@id="firstname"]')

给出一个错误,指出未找到元素:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="firstname"]"}
  (Session info: chrome=110.0.5481.180)
Stacktrace:
Backtrace:
  (No symbol) [0x00E737D3]
  (No symbol) [0x00E08B81]
  (No symbol) [0x00D0B36D]
  (No symbol) [0x00D3D382]
  (No symbol) [0x00D3D4BB]
  (No symbol) [0x00D73302]
  (No symbol) [0x00D5B464]
  (No symbol) [0x00D71215]
  (No symbol) [0x00D5B216]
  (No symbol) [0x00D30D97]
  (No symbol) [0x00D3253D]
  GetHandleVerifier [0x010EABF2+2510930]
  GetHandleVerifier [0x01118EC1+2700065]
  GetHandleVerifier [0x0111C86C+2714828]
  GetHandleVerifier [0x00F23480+645344]
  (No symbol) [0x00E10FD2]
  (No symbol) [0x00E16C68]
  (No symbol) [0x00E16D4B]
  (No symbol) [0x00E20D6B]
  BaseThreadInitThunk [0x76027D69+25]
  RtlInitializeExceptionChain [0x77AEBB9B+107]
  RtlClearBits [0x77AEBB1F+191]

Process finished with exit code 1

我尝试用time.sleep()解决这个问题,但是无论我设置多少次睡眠时间,都无济于事。
完整代码:

import time
from selenium import webdriver
from fake_useragent import UserAgent
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

ua = UserAgent()
url = "https://www.nealthy.com/alpha"

options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={ua.chrome}')

web_driver = Service('C:\\webdriver\\chromedriver.exe')  #ПУТЬ К ВЕБ ДРАЙВЕРУ
driver = webdriver.Chrome(service=web_driver, options=options)

driver.get(url=url)
time.sleep(10)
driver.find_element(By.XPATH, '//*[@id="firstname"]').send_keys('Axcent')

我尝试查找名称的字段元素并在其中插入名称。但出现了未找到该元素的错误

omqzjyyz

omqzjyyz1#

这个网站是一个有点棘手,他们有一个阴影大教堂的形式。
要访问这个DOM中的元素,首先需要找到托管它的元素(在本例中是form-widget),然后运行一个脚本来提取shadow Dom,之后就可以访问这些元素了。
下面是访问电子邮件字段的最终代码,例如:

shadowParent = driver.find_element(By.TAG_NAME, 'form-widget')
shadowRoot = driver.execute_script("return arguments[0].shadowRoot", shadowParent)
shadowRoot.find_element(By.ID,'email').send_keys('Axcent')

有关阴影穹顶的详细信息:

还有一个pypi软件包声称可以简化这个过程:

相关问题