如何使用python修复Selenium Web驱动程序``异常错误''

时间:2019-07-24 12:06:05

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver

我正在创建一个机器人,以在chrome浏览器中使用带有硒Web驱动程序的Python和质子邮件作为电子邮件服务来批量创建电子邮件帐户。当测试到达表单页面以填写您的电子邮件地址等时,我在预填表单字段时遇到问题,并且在终端上收到此错误。

引发TimeoutException(消息,屏幕,堆栈跟踪) selenium.common.exceptions.TimeoutException:消息:

我尝试增加等待时间,但是没有运气。我正在使用send_keys来预填充字段,但没有运气。下方代码中显示的测试均有效,除了最后一个命中表单页面以预填充电子邮件用户名的测试。

from selenium import webdriver
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys


url = 'https://protonmail.com/'

driver = webdriver.Chrome(
'/Users/[MYNAME]/Downloads/chromedriver')
driver.get(url)


signUp = WebDriverWait(driver, 5).until(
    EC.visibility_of_element_located((By.XPATH, '//* . 
  [@href="signup"]')))
    signUp.click()
    panel = WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.CLASS_NAME, 'panel-heading')))
panel.click()
plan = WebDriverWait(driver, 2).until(
    EC.element_to_be_clickable((By.ID, 'freePlan')))
plan.click()

username = WebDriverWait(driver, 3).until(
    EC.element_to_be_clickable((By.ID, 'username')))
username.click()
username.send_keys('usernameForUSer')

我希望用户名字段能预填。

1 个答案:

答案 0 :(得分:0)

有一个iframe被阻止访问该元素。您需要先切换到iframe。 尝试以下代码。

WebDriverWait(driver, 15).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, 'iframe.top')))
username = WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.ID, 'username')))
username.click()
username.send_keys('usernameForUSer') 

浏览器快照:

enter image description here