带代理的Selenium Reddit注册脚本报ElementNotInteractableException如何解决
报错修复方案
核心异常(ElementNotInteractableException)修复
该报错出现在browser.find_element_by_xpath('//settings-ui').send_keys(Keys.ENTER)这行,触发原因是你提前调用了browser.minimize_window()将窗口最小化,Chrome内置设置页面的元素在窗口最小化状态下处于不可交互状态。你可以选择两种修复方式:
- 直接删除清理缓存相关的冗余代码:每次启动Chrome driver实例默认就是全新的无缓存、无Cookie环境,且你后续已经调用了
browser.delete_all_cookies(),完全不需要专门跳转chrome://settings/clearBrowserData操作,直接删掉以下两行代码即可:
browser.get('chrome://settings/clearBrowserData') browser.find_element_by_xpath('//settings-ui').send_keys(Keys.ENTER)
- 如果你确实需要保留清理缓存的操作,把
browser.minimize_window()放在清理缓存操作之后执行即可。
弃用警告修复
你当前用的是Selenium 4+版本,旧的API已经被弃用,按以下方式修改即可消除警告:
- 新增依赖导入:
from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By
- 替换Chrome初始化逻辑,解决
executable_path弃用警告:
# 原来的写法 # browser = webdriver.Chrome(executable_path="chromedriver.exe", options=options) # 替换为 service = Service(executable_path="chromedriver.exe") browser = webdriver.Chrome(service=service, options=options)
- 替换所有
find_element_by_*写法,解决元素查找方法弃用警告,示例如下:
# 原写法 browser.find_element_by_id('regEmail') browser.find_element_by_xpath('//settings-ui') browser.find_element_by_class_name('status') # 替换为 browser.find_element(By.ID, 'regEmail') browser.find_element(By.XPATH, '//settings-ui') browser.find_element(By.CLASS_NAME, 'status')
其他隐藏逻辑问题修复
当前代码还存在两处逻辑错误,修复完上述问题后依然会运行异常,需要同步修改:
- 代理参数未传递问题:
signup函数中使用的proxy_phrase是全局变量,只会取到处理代理文件时的最后一个代理,不会随循环切换。修改signup函数定义为:
def signup(user, proxy_phrase):
调用时传入对应代理:
signup(register_user, getting_proxy)
- 账号&代理遍历逻辑错误:你已经提前读取了
usernames.txt和proxy_phrases.txt的内容到usernames和phrases变量,不需要再操作creds字典做冗余读取,直接把最后一段遍历逻辑替换为:
creation_creds = list(zip(usernames, phrases)) for one in creation_creds: getting_proxy = one[1] register_user = one[0] signup(register_user, getting_proxy) print("Successfully Registered ", register_user) sleep(800)
内容的提问来源于stack exchange,提问作者Alex Joel
相关产品推荐
相关产品推荐

