Unable to type within username field within ProtonMail signup page using Selenium and Python

那年仲夏 提交于 2021-01-13 09:42:42

问题


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?


回答1:


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:

  • Ways to deal with #document under iframe
  • Switch to an iframe through Selenium and python



回答2:


Your xpath is OK, but the forms are inside an iframe.

So you need to switch to the iframe first:

driver.switchTo().frame(n);

Edit: If you read the TOS, you will see

This Service is provided exclusively to persons. Accounts registered by “bots” or automated methods are not authorized and will be terminated.



来源:https://stackoverflow.com/questions/62365613/unable-to-type-within-username-field-within-protonmail-signup-page-using-seleniu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!