无法使用Selenium和Python在ProtonMail注册页面的用户名字段内键入 [英] Unable to type within username field within ProtonMail signup page using Selenium and Python

查看:152
本文介绍了无法使用Selenium和Python在ProtonMail注册页面的用户名字段内键入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆