使用无头Chrome(Selenium C#)下载文件时遭遇异常
解决无头Chrome模式下Selenium无法下载文件的问题
针对ChromeDriver 110.0.5版本中,无头模式无法下载文件但非无头模式正常的问题,可通过补充配置参数和调整用户偏好解决,修改后的代码如下:
ChromeOptions options = new ChromeOptions(); var chromeDriverService = ChromeDriverService.CreateDefaultService(); chromeDriverService.HideCommandPromptWindow = true; chromeDriverService.SuppressInitialDiagnosticInformation = true; // 替换旧无头参数为兼容模式(适配Chrome 110+) options.AddArgument("--headless=chrome"); // 添加必要参数规避环境限制 options.AddArgument("--no-sandbox"); options.AddArgument("--disable-dev-shm-usage"); string downloadPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + @"\Downloads"; options.AddUserProfilePreference("download.default_directory", downloadPath); // 禁用下载提示框(无头模式无法交互确认) options.AddUserProfilePreference("download.prompt_for_download", false); options.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1); options.AddArgument("--window-size=1920,1080"); // 若下载PDF等浏览器默认预览的文件,需添加此配置强制下载 options.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
关键配置说明
- 切换无头模式类型:旧的
--headless参数对应精简版Chrome环境,与正常浏览器行为差异大,改用--headless=chrome可模拟更接近正常Chrome的运行环境,解决大部分兼容性问题(Chrome 112+可直接用--headless=new)。 - 禁用下载提示:无头模式下无法处理下载确认弹窗,必须通过
download.prompt_for_download=false自动确认下载操作。 - 环境兼容参数:
--no-sandbox和--disable-dev-shm-usage可避免因系统沙箱或共享内存限制导致的功能异常,Windows和Linux环境均适用。 - 特定文件处理:针对PDF等浏览器默认在线预览的文件,需开启
plugins.always_open_pdf_externally强制触发下载。
内容的提问来源于stack exchange,提问作者Krishna Rao
相关产品推荐
相关产品推荐

