首页 > 解决方案 > Selenium Python - 如何在动态网站中查找元素(获取 NoSuchElementException 异常)

问题描述

我正在尝试自动登录网站https://www.crisilresearch.com/#/ 在右上角,有登录选项,我设法以自动方式捕获并单击它。但是随后登录表单会在同一页面上弹出

如此处所示。

现在,我尝试对“电子邮件”和“密码”执行检查元素,但我不断收到NoSuchElementException异常。例如,电子邮件上的“检查元素”会显示一个 HTML 输入标签,其 ID 为“emailid”。所以我尝试了以下

inputElement = driver.find_element_by_id('emailid')
inputElement.send_keys(email)

但如前所述,这给出了NoSuchElementException异常。密码和其他选项的类似问题。请帮助我。

标签: pythonseleniumweb-scraping

解决方案


你只需要放置一个 webdriverwait 来等待元素被加载。这应该有效:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome("D:/chromedriver/94/chromedriver.exe")
driver.get("https://www.crisilresearch.com/#/")
# wait 60 seconds 
wait = WebDriverWait(driver,60)


wait.until(EC.element_to_be_clickable((By.XPATH, '//a[text()="Login "]'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@id="emailid"]'))).send_keys("username@user.com")
wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@id="passwords"]'))).send_keys("myPassw0rd")
wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@id="sub"]'))).click()

推荐阅读