使用WebDriver下载提示‘Fail - Download error’,手动下载正常问题排查
分析ChromeDriver下载失败(手动正常但自动化报错)的可能原因及解决方法
根据你提供的代码和问题描述,手动下载正常但WebDriver执行时出现Fail - Download error,大概率是ChromeDriver的配置或环境问题导致的,下面是几个最常见的原因及对应的修复方案:
1. 旧版无头模式(headless)的下载限制
你当前使用的是旧版的headless参数,Chrome 112及之前的旧无头模式对文件下载的支持不完善,很多情况下会直接失败。而新版的无头模式(headless=new)完全复刻了正常Chrome的行为,包括下载功能。
修复方法:
把代码中的"headless"替换为"headless=new",同时可以保留disable-gpu(兼容旧版本无影响):
if (SilentMode) { chromeOptions.AddArguments("headless=new", "disable-gpu", "silent-launch", "no-startup-window", "incognito"); }
2. 下载目录的权限或路径问题
你设置了download.default_directory为CaminhoDownload,但可能存在以下问题:
- 该路径没有写入权限:比如运行程序的账号无权限访问目标文件夹(如系统盘受保护目录)
- 路径是相对路径或包含特殊字符:ChromeDriver需要绝对路径,且路径若含空格/非ASCII字符(系统编码不支持时)会导致写入失败
修复方法:
- 确保
CaminhoDownload是绝对路径,且给运行程序的账号赋予该目录的读写权限 - 可以在代码中打印实际路径确认是否正确:
Console.WriteLine("下载路径:" + Path.GetFullPath(CaminhoDownload));
3. 缺少必要的下载偏好设置
你已经设置了download.prompt_for_download,但还需要补充两个关键偏好,确保Chrome自动下载不被拦截:
修复方法:
添加以下配置:
chromeOptions.AddUserProfilePreference("download.directory_upgrade", true); chromeOptions.AddUserProfilePreference("safebrowsing.enabled", false);
download.directory_upgrade:指定目录不存在时,Chrome会自动创建它safebrowsing.enabled:关闭安全浏览检查,避免Chrome误判下载文件不安全而拦截
4. ChromeDriver与Chrome版本不匹配
这是WebDriver最常见的问题之一,若Chrome浏览器和ChromeDriver版本不一致,会导致包括下载在内的各种功能异常。
修复方法:
- 打开Chrome,在
chrome://settings/help查看当前浏览器版本 - 下载对应主版本号的ChromeDriver(比如Chrome是120.x,ChromeDriver也必须是120.x)
- 替换当前使用的ChromeDriver文件
5. 无头模式下的额外参数缺失
新版无头模式虽支持下载,但有时需要补充参数确保界面渲染正常,避免依赖界面状态的下载逻辑失败:
修复方法:
尝试添加以下参数:
chromeOptions.AddArguments("--window-size=1920,1080", "--disable-features=VizDisplayCompositor");
内容的提问来源于stack exchange,提问作者Paulo Ricardo Montarroios
相关产品推荐
相关产品推荐

