Python中ChromeDriver自定义下载文件夹失效问题求助
核心问题分析
你使用的是snap打包的Chromium,这类沙箱化应用对文件系统访问有严格限制,普通自定义路径可能不在它的允许访问范围内;同时代码里同时设置了prefs和desired_caps,两者存在配置冲突,且desired_caps里的savefile配置属于旧版格式,当前Chromedriver已不再推荐使用。
具体解决步骤
清理冲突配置
直接删除desired_caps相关代码,仅保留ChromeOptions中的prefs配置,避免重复设置导致的参数冲突。适配snap的文件访问权限
snap版Chromium默认仅允许访问~/Downloads、~/Documents等特定目录,你可以将自定义文件夹放在这些目录下(比如~/Downloads/my_custom_folder),绕过权限限制。如果必须使用其他目录,执行以下命令给Chromium授权:sudo snap connect chromium:home :home该命令允许Chromium访问用户主目录下的所有子文件夹。
修正prefs配置并使用绝对路径
确保my_data_folder是绝对路径(比如/home/your_username/my_custom_folder),不要使用相对路径或~/(Chromium无法正确解析这类路径)。同时可以添加禁用PDF预览的配置,避免部分文件被浏览器直接打开而非下载:options = webdriver.ChromeOptions() # 替换为你的绝对路径 my_data_folder = "/home/xxx/my_custom_downloads" prefs = { 'profile.default_content_settings.popups': 0, 'download.default_directory': my_data_folder, "download.directory_upgrade": True, "download.prompt_for_download": False, "safebrowsing.enabled": False, # 禁用PDF预览插件,强制文件下载 "plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}] } options.add_argument('--remote-debugging-port=9222') options.add_experimental_option("useAutomationExtension", False) options.add_experimental_option('prefs', prefs) # 移除desired_capabilities参数,避免冲突 driver = webdriver.Chrome(options=options)排查远程调试端口的影响
如果启用了--remote-debugging-port=9222,可能会复用已有的Chromium实例(该实例的下载路径仍为默认值)。可以先关闭所有Chromium进程再运行脚本,或者在不需要远程调试时直接移除该参数。
验证方法
运行脚本前,手动打开Chromium,将设置中的下载路径改为你的自定义路径,然后关闭所有Chromium窗口,再启动爬虫脚本,新实例会正确加载配置的下载路径。
内容的提问来源于stack exchange,提问作者mm_

