繁体   English   中英

Python 和 Selenium 错误“发生异常:NoSuchElementException”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM