Selenium调用本地Chrome替代ChromeDriver加载扩展时service参数报错如何解决
问题排查与解决方案
一、当前报错修复
你遇到的TypeError: __init__() got an unexpected keyword argument 'service'报错是Selenium版本不匹配导致的:
Selenium 4.0及以上版本才支持service参数传入Service对象,你本地安装的是3.x及以下的旧版本,无法识别该参数,可从两种修复方案中选其一:
- 方案1:升级Selenium到4.x版本
执行pip命令完成升级,原有代码无需修改即可正常运行:pip install --upgrade selenium - 方案2:兼容旧版本Selenium,调整代码写法
不使用Service对象,直接把驱动路径传入executable_path参数:from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument(r"--user-data-dir=C:\\Users\\czarn\\AppData\\Local\\Google\\Chrome\\User Data") chrome_options.add_argument(r'--profile-directory=Member') window = webdriver.Chrome(executable_path='D:\\chromedriver.exe', options=chrome_options)
二、Chrome用户配置复用注意事项
调整版本后如果仍加载配置失败,可检查以下几点:
- 运行代码前必须完全关闭所有本地Chrome窗口,同一个Chrome用户配置目录同一时间只能被一个Chrome进程占用,被锁定后会导致Selenium加载失败。
- 确认
profile-directory参数值正确:在Chrome地址栏输入chrome://version/,查看「个人资料路径」字段,路径最后一段就是对应配置的目录名,比如路径为C:\Users\xxx\AppData\Local\Google\Chrome\User Data\Default时,配置目录名就是Default。 - 确认Chrome浏览器版本和chromedriver版本完全匹配,大版本号必须一致,否则也会出现加载异常。
三、备选方案:打包已配置扩展直接加载
如果不想依赖本地Chrome配置,也可以把完成参数设置的扩展打包为crx文件,启动Selenium时直接加载,无需每次上传ZIP再修改配置:
- 打开Chrome扩展管理页面并开启开发者模式,找到已配置好的扩展,点击「打包扩展程序」生成crx文件。
- 启动Chrome时加载该crx即可:
chrome_options.add_extension('你的扩展文件路径.crx')
该方式不依赖本地用户配置,扩展的配置会一并打包在crx中,启动后可直接使用。
内容的提问来源于stack exchange,提问作者Sadboy
相关产品推荐
相关产品推荐

