Selenium WhatsApp批量消息脚本Windows环境WebDriver报错求助
问题修复方案
错误原因分析
- 第一个
TypeError: __init__() got an unexpected keyword argument 'options'错误
核心是Selenium版本不兼容,你Ubuntu环境用的是Selenium3.x版本,Windows环境安装的是Selenium4.6+版本,两个版本的webdriver.Chrome构造函数参数规则完全不同:- Selenium3.x 支持直接传
executable_path、options等关键字参数 - Selenium4.6+ 之后取消了直接传这类参数的写法,驱动路径需要封装到
Service对象中传递,同时你的代码本身也存在缩进错误、options定义后没有传入driver初始化方法的问题
- Selenium3.x 支持直接传
- 第二个
AttributeError: 'NoneType' object has no attribute 'quit'错误
是因为第一步driver初始化失败,self.driver还是初始化时的None值,finally块直接调用self.driver.quit()就会触发空对象属性错误。
修复步骤
- 首先修正
load_driver方法的缩进错误、参数传递逻辑,适配Selenium4的写法 - 修改
close_driver方法,增加非空判断避免空指针 - 不需要手动指定ChromeDriver路径,Selenium4.6+自带的驱动管理功能会自动匹配对应版本的驱动,也可以保留webdriver_manager的逻辑
修复后的代码片段
1. 新增Service类导入
from selenium.webdriver.chrome.service import Service
2. 修正load_driver方法
def load_driver(self): # 定义options,修正原有缩进错误 options = Options() options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe" # 封装驱动路径到Service对象,适配Selenium4规范 service = Service(ChromeDriverManager().install()) # 初始化driver时传入service和options参数 self.driver = webdriver.Chrome(service=service, options=options) self.driver.get("https://web.whatsapp.com") self.driver_wait = WebDriverWait(self.driver, 20)
3. 修正close_driver方法
def close_driver(self): # 先判断driver是否初始化成功,再调用quit方法 if self.driver is not None: self.driver.quit()
额外说明
如果不想适配Selenium4,也可以直接降级到和Ubuntu环境一致的Selenium3版本解决参数错误,运行命令pip install selenium==3.141.0即可。
内容的提问来源于stack exchange,提问作者Fazzy Malhotra
相关产品推荐
相关产品推荐

