You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium ChromeDriver如何触发PDF下载而非直接显示?

ChromeDriver控制Chrome自动下载PDF失效问题解决

问题说明

  • 我有一套基于Selenium ChromeDriver的测试套件,部分测试会触发服务器PDF下载。之前运行正常,但Chrome升级到131.0.6778.70(64位官方版)后,默认用内置PDF查看器显示文件而非下载,导致测试功能失效。
  • 手动打开chrome://settings/content/pdfDocuments选择「下载PDF文件」单选按钮能解决,但这个设置只在手动启动Chrome时生效,用ChromeDriver启动的实例不继承该配置。
  • 尝试过通过ChromeDriver打开设置页修改,但无法定位到「下载PDF文件」单选按钮——它没有特定类名,用XPath或文本定位都失败。
  • 当前使用Selenium和ChromeDriver均为v4.21.0版本。

已尝试的无效配置

我试过以下代码配置ChromeOptions,但PDF仍然在Chrome预览窗口显示,不会下载到本地:

...
ChromeOptions chromeOptions = new ChromeOptions(); 
chromeOptions.addArguments("profile.default_content_settings.popups", "0"); // 禁用弹出窗口
chromeOptions.addArguments("download.default_directory", "U://Downloads"); // 修改默认下载目录
chromeOptions.addArguments("download.prompt_for_download", "false");
chromeOptions.addArguments("download.directory_upgrade", "true");
chromeOptions.addArguments("plugins.always_open_pdf_externally", "false"); // 不在Chrome中直接显示PDF
driver = new ChromeDriver(chromeOptions);
...

有效解决方案

方案1:通过Chrome偏好设置配置(推荐)

你之前的错误在于把Chrome用户偏好当成了启动参数传递,实际上这些配置需要通过setExperimentalOption来设置用户偏好(prefs),而非用addArguments。正确代码如下:

ChromeOptions chromeOptions = new ChromeOptions();
Map<String, Object> prefs = new HashMap<>();

// 核心配置:设置PDF自动下载,不使用内置查看器
prefs.put("plugins.always_open_pdf_externally", true);
// 指定下载目录
prefs.put("download.default_directory", "U://Downloads");
// 取消下载确认提示
prefs.put("download.prompt_for_download", false);
// 允许自动升级下载目录
prefs.put("download.directory_upgrade", true);
// 禁用弹出窗口拦截
prefs.put("profile.default_content_settings.popups", 0);

// 将偏好设置传入ChromeOptions
chromeOptions.setExperimentalOption("prefs", prefs);
driver = new ChromeDriver(chromeOptions);

方案2:复用手动配置的Chrome用户数据目录

如果方案1无效,可以让ChromeDriver复用你手动配置好下载设置的用户数据目录,这样启动的Chrome实例会继承手动设置的PDF下载偏好:

ChromeOptions chromeOptions = new ChromeOptions();
// 替换为你的Chrome用户数据实际路径,注意启动前要关闭所有手动打开的Chrome窗口
chromeOptions.addArguments("user-data-dir=C:\\Users\\你的用户名\\AppData\\Local\\Google\\Chrome\\User Data");
driver = new ChromeDriver(chromeOptions);

内容的提问来源于stack exchange,提问作者mmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:22:42