Selenium使用指定Chrome配置文件时prefs下载目录配置被忽略问题
问题根本原因
Selenium启动Chrome时指定加载本地已存在的用户配置文件的场景下,Chrome会优先读取配置文件中已经固化的偏好设置,你通过add_experimental_option传入的prefs参数优先级低于配置文件内的已有配置,因此自定义下载目录的设置会被原有配置覆盖。
可行解决方案
推荐使用Chrome DevTools Protocol(CDP)动态修改下载路径,该方法优先级高于配置文件的固化设置,无需修改原有Chrome配置即可生效。
修正后的代码示例
from selenium import webdriver downloadFolderPath = 'P:\\reports\\attachments' options = webdriver.ChromeOptions() options.add_argument(r'--user-data-dir=C:\\Users\\my.name\\AppData\\Local\\Google\\Chrome\\User Data') options.add_argument(r'--profile-directory=Profile 5') options.headless = False browser = webdriver.Chrome(executable_path='chromedriver.exe', options=options) # 新增CDP命令修改下载路径,优先级高于配置文件原有设置 browser.execute_cdp_cmd('Page.setDownloadBehavior', { 'behavior': 'allow', 'downloadPath': downloadFolderPath }) # 后续执行浏览页面、点击下载等操作
如果你不想用CDP的方式,也可以手动修改目标配置的默认下载路径:
- 手动打开Chrome,切换到你要加载的
Profile 5配置文件 - 进入Chrome设置 -> 高级 -> 下载内容,将默认下载位置修改为
P:\reports\attachments - 保存设置后关闭所有Chrome进程,再运行Selenium代码即可生效,无需额外传prefs参数。
注意事项
- 确保你指定的自定义下载目录真实存在,且当前Windows用户对该目录有读写权限,否则下载路径会自动回退到配置默认的目录
- 启动Selenium前请关闭所有正在运行的Chrome进程,避免同一用户配置被多个Chrome实例占用,导致配置加载失败、参数不生效
- 你使用的Chrome和ChromeDriver版本匹配,没有版本兼容性问题,无需更换驱动。
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

