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

Java Selenium无头Chrome模式无法下载文件问题求助

Chrome无头模式在Github Actions/AWS环境下无法下载文件的排查与解决

针对你遇到的本地正常但CI/AWS环境下无头Chrome无法下载的问题,结合你的配置,给出以下排查方向和解决方案:

1. 确保下载目录存在且有权限

在服务器或CI环境中,代码指定的downloadDirectory可能不存在,或者运行进程没有写入权限。先在代码中添加目录创建逻辑:

File downloadDir = new File(downloadDirectory);
if (!downloadDir.exists()) {
    downloadDir.mkdirs();
}

同时检查环境中该目录的读写权限,比如在Github Actions中,默认工作目录是有权限的,但自定义路径需要确认。

2. 补充无头模式下载的关键配置

新的--headless=new模式下,默认的安全策略可能拦截下载请求,需要补充以下配置:

  • 添加参数禁用弹窗拦截和启用网络服务:
    headlessChromeOption.addArguments("--disable-popup-blocking");
    headlessChromeOption.addArguments("--enable-features=NetworkService,NetworkServiceInProcess");
    
  • 完善下载偏好设置:
    headlessChromePrefs.put("download.directory_upgrade", true);
    headlessChromePrefs.put("safebrowsing.enabled", false); // 关闭安全浏览检查,避免拦截未知来源文件
    

3. 严格匹配ChromeDriver与Chrome版本

Selenium 4.4.0对应的ChromeDriver版本范围是104.x-106.x,务必确保CI/AWS环境中安装的Chrome版本和ChromeDriver版本完全匹配。比如在Github Actions中,可以显式指定Chrome版本:

- name: Setup Chrome
  uses: browser-actions/setup-chrome@latest
  with:
    chrome-version: '106'

4. 移除冗余的DesiredCapabilities配置

Selenium 4+版本推荐直接使用ChromeOptions,不需要再通过DesiredCapabilities合并,你的代码中这部分可以删除,简化配置:

// 移除以下冗余代码
// DesiredCapabilities capabilities = new DesiredCapabilities();
// capabilities.setCapability(ChromeOptions.CAPABILITY, headlessChromeOption);
// headlessChromeOption.merge(capabilities);

5. 启用日志排查下载请求

如果以上方法无效,开启Chrome的性能日志,查看下载请求是否被触发或拦截:

LoggingPreferences logs = new LoggingPreferences();
logs.enable(LogType.PERFORMANCE, Level.ALL);
headlessChromeOption.setLoggingPreferences(logs);

之后通过driver.manage().logs().get(LogType.PERFORMANCE)获取日志,分析请求状态码和错误信息,定位具体阻塞点。

调整后的完整配置示例

HashMap<String, Object> headlessChromePrefs = new HashMap<String, Object>();
ChromeOptions headlessChromeOption = new ChromeOptions();

// 确保下载目录存在
File downloadDir = new File(downloadDirectory);
if (!downloadDir.exists()) {
    downloadDir.mkdirs();
}

// 无头模式核心参数
headlessChromeOption.addArguments("--headless=new");
headlessChromeOption.addArguments("--disable-gpu");
headlessChromeOption.addArguments("--disable-dev-shm-usage");
headlessChromeOption.addArguments("--no-sandbox");
headlessChromeOption.addArguments("--window-size=1920,1200");
headlessChromeOption.addArguments("--disable-popup-blocking");
headlessChromeOption.addArguments("--enable-features=NetworkService,NetworkServiceInProcess");

// 下载偏好设置
headlessChromePrefs.put("download.default_directory", downloadDirectory);
headlessChromePrefs.put("download.prompt_for_download", false);
headlessChromePrefs.put("download.directory_upgrade", true);
headlessChromePrefs.put("safebrowsing.enabled", false);

headlessChromeOption.setExperimentalOption("prefs", headlessChromePrefs);

// 初始化Driver
driver = new ChromeDriver(headlessChromeOption);

另外,还要检查CI/AWS环境的网络策略,确保目标下载地址没有被代理、防火墙或安全组拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:43:17