Selenium有时无法在我的程序中找到元素

问题描述 投票:0回答:1

我正在使用硒将一些数据输入到字段中。问题是我的程序多次遍历该字段,其中一些返回以下错误。我不确定是什么原因引起的,因为它没有标准的行为模式。我尝试用各种可能的find_element方法来区分find_elenemt方法,但是得到的结果是相同的。 这是错误:

selenium.common.exceptions.NoSuchElementException:消息:没有这样的消息元素:无法找到元素:{“ method”:“ css选择器“,”选择器“:” [name =“用户名”]“}

这是导致错误的块:

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Field Completion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
email = emailgen()
time.sleep(0.1)
mail = driver.find_element_by_name('email').send_keys(email)
driver.find_element_by_class_name('next-button').click()
time.sleep(0.3)
driver.find_element_by_xpath("/html/body/div[3]/div/div/div[2]/div[1]/form/div[1]/div[2]/select/option[9]").click()
driver.find_element_by_xpath("//select[@name='dob-month']//option[3]").click()
driver.find_element_by_xpath("//select[@name='dob-year']//option[contains(text(),'1993')]").click()
driver.find_element_by_xpath("//button[contains(text(),'next')]").click()
tempuser = email.split('@')[0]
temppass = passwordgen()
time.sleep(0.5)
print('Username = ', tempuser)
print('Password = ', temppass)
combocr()
time.sleep(0.5)
driver.find_element_by_name('username').send_keys(tempuser)
driver.find_element_by_name('password').send_keys(temppass)
driver.find_element_by_name('confirm_password').send_keys(temppass)
driver.find_element_by_css_selector('#root > div > div > div.registration-component.scene-component.mounted > div.scene-content > form > div:nth-child(4) > label > div').click()
driver.find_element_by_css_selector("#root > div > div > div.registration-component.scene-component.mounted > div.scene-content > form > div.next-button > button").click()
print('Acquiring Token..')
time.sleep(1)
python selenium field
1个回答
0
投票

有时仅在某个元素上找到该元素,因为在尝试找到该元素之前,它可能尚未完全加载到页面上。

我将修改这三行:

email = emailgen()
time.sleep(0.1)
mail = driver.find_element_by_name('email').send_keys(email)

为此:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# add the above imports

email = emailgen()
mail = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.NAME, 'email')))
mail.send_keys(email)

我们在电子邮件字段上将time.sleep()替换为WebDriverWait,以确保在查找之前已完全加载。 time.sleep()每次都将等待相同的时间,这并不总是足够的时间来加载页面。WebDriverWait执行元素加载所需的确切等待时间,最多15秒。希望这可以解决您的间歇性错误。

© www.soinside.com 2019 - 2024. All rights reserved.