Selenium加载Chrome个人配置文件无响应、启动报错如何解决
问题描述
使用Selenium编写Chrome自动化脚本时,尝试加载个人Chrome配置文件过程中出现以下异常:
- 初始编写的错误代码如下:
from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("user-data-dir=C:\\Users\\oacoo\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 4") driver = webdriver.Chrome ('C:\\Users\\oacoo\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe', options=options)
- 运行上述代码虽然能打开对应个人配置的Chrome窗口,但驱动完全不响应指令,无法执行网页搜索、XPath元素点击等常规自动化操作。
- 本地ChromeDriver存储路径为
C:\\webdrivers\\chromedriver.exe,如果将启动路径替换为该ChromeDriver路径,只能打开未登录的纯净版Chrome,个人配置文件完全不加载。 - 如果直接把Chrome浏览器本体路径
C:\\Users\\oacoo\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe作为webdriver.Chrome的启动参数,会抛出如下报错:
Traceback (most recent call last): File "C:\Users\oacoo\OneDrive\Desktop\bots\bot\xoldver\likesmodule\password reset\passcode.py", line 18, in <module> driver = webdriver.Chrome('C:\\Users\\oacoo\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe', options=options) File "C:\Users\oacoo\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__ self.service.start() File "C:\Users\oacoo\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 98, in start self.assert_process_still_running() File "C:\Users\oacoo\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 109, in assert_process_still_running raise WebDriverException( selenium.common.exceptions.WebDriverException: Message: Service C:\Users\oacoo\AppData\Local\Google\Chrome\Application\chrome.exe unexpectedly exited. Status code was: 0
问题根因
- 存在语法错误:
webdriver.Chrome后多余的换行把构造函数调用拆成了两行,实际没有正确初始化驱动实例,才会出现打开浏览器但不响应指令的情况。 - 参数传递错误:
webdriver.Chrome第一个位置参数是ChromeDriver的服务路径,不是Chrome浏览器本体的路径。指定Chrome程序路径需要通过Options的binary_location属性设置,直接传Chrome路径会被当成驱动服务启动,必然报错退出。 - 配置参数写法错误:
user-data-dir参数只需要指定到User Data目录层级,具体的Profile目录需要单独通过profile-directory参数传入,直接写到Profile 4路径会导致配置读取异常。 - 进程锁冲突:如果启动脚本时系统后台已经有打开的Chrome进程占用了目标用户配置目录,会导致配置加载失败,只能打开无配置的空白浏览器。
正确实现方案
- 启动脚本前必须彻底关闭所有正在运行的Chrome进程,可在任务管理器中结束所有
chrome.exe进程,避免配置文件被锁无法加载。 - 使用如下正确代码实现配置加载:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service options = Options() # 指定Chrome浏览器本体路径 options.binary_location = r"C:\Users\oacoo\AppData\Local\Google\Chrome\Application\chrome.exe" # 指定用户数据根目录 options.add_argument(r"user-data-dir=C:\Users\oacoo\AppData\Local\Google\Chrome\User Data") # 指定具体要加载的配置目录 options.add_argument("--profile-directory=Profile 4") # 关闭自动化标识,避免被网站检测、减少功能冲突 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) # 通过Service类传入ChromeDriver路径 service = Service(executable_path=r"C:\webdrivers\chromedriver.exe") driver = webdriver.Chrome(service=service, options=options) # 测试驱动是否正常响应 driver.get("https://www.google.com")
- 其他注意事项:
- 确保本地ChromeDriver版本和安装的Chrome浏览器大版本完全对应,否则会出现兼容性报错。
- 脚本运行过程中不要手动打开同配置的Chrome窗口,会触发配置目录锁导致脚本异常退出。
- Windows路径字符串前加
r前缀可以避免反斜杠转义问题,不需要手动写双反斜杠。
内容的提问来源于stack exchange,提问作者Kronic Troll
相关产品推荐
相关产品推荐

