[英]Python and Selenium error "Exception has occurred: NoSuchElementException"
我正在使用 Python 语言的 Selenium 库创建 Web 自动化,但是当涉及到用户名或电子邮件时,我收到此错误(我在密码部分没有收到错误)。 我在论坛上研究过,但找不到解决方案。 我是 Python 和 selenium 的新手,所以我在等待您的帮助。
代码:
#Get Url
browser.get('https://mail.protonmail.com/create/new?language=en')
time.sleep(5)
#Choose Username
browser.find_element_by_id('username').send_keys('usernameForUser')
time.sleep(5)
错误:
Exception has occurred: NoSuchElementException
Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="username"]"}
(Session info: chrome=86.0.4240.75)
截图代码:
一个 iframe 代码出现在 Div 中。 问题可能是由这个引起的吗?
是的,需要切换到 iframe。
WebDriverWait(browser, 5).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, '.top')))
进口
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
用户名文本框位于框架内,因此您需要切换框架才能与之交互。
frames = driver.find_elements_by_tag_name("iframe")
print(len(frames))
driver.switch_to.frame(0)
wait = WebDriverWait(driver, 20)
username = wait.until(EC.presence_of_element_located((By.ID, "username")))
username.send_keys("xyz")
密码文本框不在框架中,因此您必须将控件切换回主页面并超出密码文本框。 由于从帧切换后密码文本框需要一些时间来准备访问,因此请在此处使用显式等待。 喜欢,
driver.switch_to.default_content()
password = wait.until(EC.presence_of_element_located((By.ID, "password")))
password.send_keys("123")
还有一件事,因为 URL 需要时间来加载,使用隐式等待而不是 time.sleep()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.