Python Selenium开发ProtonMail注册Bot时元素交互失败求助
问题解决:ProtonMail注册Bot的两个错误处理
1. 解决executable_path弃用警告
- 新版Selenium(4.x+)不再支持直接传递
executable_path参数初始化驱动,需使用Service类管理驱动文件 - 你的代码中重复初始化了
driver实例,这会导致第一个实例被覆盖且资源浪费,需删除重复行
修改后的驱动初始化代码:
from selenium import webdriver from selenium.webdriver.chrome.service import Service # 新增Service类导入 from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import random import string import time PATH = "C:\Program Files (x86)\chromedriver.exe" options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 使用Service类初始化驱动 service = Service(PATH) driver = webdriver.Chrome(service=service, options=options)
2. 解决ElementNotInteractableException错误
错误原因:
- ProtonMail注册页面可能存在多个
id="email"的元素,你定位到的是不可见/不可交互的实例 - 固定
time.sleep(5)不可靠,页面加载完成后元素可能仍未处于可交互状态
解决方案:使用显式等待替代固定sleep,等待元素可交互后再执行输入操作,确保定位到正确的输入框
修改后的核心代码片段:
from selenium.webdriver.support.ui import WebDriverWait # 新增显式等待类导入 from selenium.webdriver.support import expected_conditions as EC # 新增预期条件导入 driver.get('https://mail.protonmail.com/create/new?language=en') usrnm = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)]) passwd = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)]) # 最长等待10秒,直到邮箱输入框可点击交互 emailad = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'email')) ) emailad.send_keys(usrnm) time.sleep(5) driver.quit() # 注意添加括号,否则不会执行关闭浏览器操作
完整修正代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import random import string import time PATH = "C:\Program Files (x86)\chromedriver.exe" options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) service = Service(PATH) driver = webdriver.Chrome(service=service, options=options) driver.get('https://mail.protonmail.com/create/new?language=en') usrnm = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)]) passwd = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)]) # 等待邮箱输入框可交互 emailad = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'email')) ) emailad.send_keys(usrnm) time.sleep(5) driver.quit()
额外提示
- 若仍无法定位正确元素,可尝试更精确的定位方式,比如CSS选择器:
By.CSS_SELECTOR, 'input#email[name="email"]' - 显式等待比固定sleep更稳定,能适配不同网络和页面加载速度
内容的提问来源于stack exchange,提问作者ThatGuyWhoNeedsHelp
相关产品推荐
相关产品推荐

