无法使用Selenium和Python在ProtonMail注册页面的用户名字段内键入 [英] Unable to type within username field within ProtonMail signup page using Selenium and Python
问题描述
我正尝试使用Selenium和Python为网站
我的代码就像以下:
BASE_URL ='https://mail.protonmail.com/create/new?language=zh-CN'
驱动程序= webdriver.Chrome(executable_path ='。/ drivers / chromedriver')
driver.get(BASE_URL)
river.find_element_by_xpath('// * [@ id = username]')。 send_keys('someStringValue')
执行以下代码后,出现错误:
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{ method: xpath, selector : // * [@ id = username]}
(会话信息:chrome = 83.0.4103.97)
有任何建议吗?
电子邮件地址字段位于< iframe&g t;
,因此您必须:
-
为所需的引入 WebDriverWait 框架可用并切换到它。
。
-
为所需的生成 WebDriverWait 元素可点击。
-
您可以使用以下任一
参考
您可以在以下位置找到相关的讨论:
Hi I was trying to type the username field using Selenium and Python for the website https://mail.protonmail.com/create/new?language=en.
From the developer tool, I am able to inspect the item using CSSSelector/Xpath or other way. But when I am running the pthon script its not working. Screenshot attached:
My code is like the following:
BASE_URL = 'https://mail.protonmail.com/create/new?language=en' driver = webdriver.Chrome(executable_path='./drivers/chromedriver') driver.get(BASE_URL) river.find_element_by_xpath('//*[@id="username"]').send_keys('someStringValue')
And after executing the following code, geetting the error:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="username"]"} (Session info: chrome=83.0.4103.97)
Any suggestion?
解决方案The Email Address field is within an
<iframe>
so you have to:Induce WebDriverWait for the desired frame to be available and switch to it.
Induce WebDriverWait for the desired element to be clickable.
You can use either of the following Locator Strategies:
Using
CSS_SELECTOR
:driver.get('https://mail.protonmail.com/create/new?language=en') WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"div.usernameWrap iframe[title='Registration form']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.input#username"))).send_keys("FunnyBoss")
Using
XPATH
:driver.get("https://mail.protonmail.com/create/new?language=en") WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//div[@class='usernameWrap']//iframe[@title='Registration form']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='input' and @id='username']"))).send_keys("FunnyBoss")
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Browser Snapshot:
Reference
You can find a relevant discussion in:
这篇关于无法使用Selenium和Python在ProtonMail注册页面的用户名字段内键入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!