Java+Spring Boot项目中Selenium文件下载无法完成求助(Chrome 135、Selenium 4.31.0)
兄弟,我之前也踩过Chrome+Selenium下载卡在.crdownload文件的坑,结合你用的Java 21+Spring Boot 3环境,还有现在碰到的问题——之前一切正常,现在下载只生成临时的.crdownload文件却始终没法完成,给你几个实用的排查方向,你挨个试试:
先确认ChromeDriver和Chrome版本完全匹配:Chrome更新速度贼快,你现在用的是Chrome 135,得确保Selenium用的ChromeDriver是对应135版本的。哪怕小版本差一点,都可能触发这种奇怪的下载卡住问题,毕竟Chrome和驱动的适配要求很严。你可以在代码里打印下驱动版本,或者手动指定对应版本的ChromeDriver路径测试。
排查下载目录的权限和配置:这大概率是很多人踩的坑!Spring Boot项目运行的账户(比如本地IDE的运行账户,或者服务器上的应用账户)可能没有你设置的下载目录的读写权限,导致Chrome没法把临时的
.crdownload重命名成完整文件。
你可以手动指定一个绝对路径的下载目录,并且确保这个目录对程序有完全的读写权限,代码里这么配置ChromeOptions:ChromeOptions options = new ChromeOptions(); Map<String, Object> prefs = new HashMap<>(); prefs.put("download.default_directory", "D:/test_downloads"); // 换成你的绝对路径 prefs.put("download.prompt_for_download", false); // 禁用下载弹窗 prefs.put("download.directory_upgrade", true); options.setExperimentalOption("prefs", prefs);另外别用带中文或特殊字符的路径,容易踩编码的坑。
调整Chrome启动参数,禁用干扰项:Chrome的沙箱机制或者安全设置,在被程序调用时可能会干扰下载流程。你可以试试给ChromeOptions加这些参数:
options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); // 解决内存不足的问题 options.addArguments("--disable-popup-blocking");注意
--no-sandbox在生产环境要谨慎使用,先本地测试确认是不是这个问题。排除目标资源和网络问题:先手动模拟一遍下载操作——用你的Chrome打开同一个页面,做和自动化脚本完全一样的操作,看看文件能不能正常下载完成。如果手动也不行,那就是目标文件本身或者服务器的问题,和Selenium无关;如果手动可以,再回到脚本里找问题。
试试调整Selenium版本:虽然4.31.0是比较新的版本,但说不定这个版本和Chrome 135有适配bug。你可以试试降级到4.30.0,或者升级到最新的稳定版,看看能不能解决这个下载卡住的问题。
就像你遇到的情况,文件一直停留在下载中状态,只生成.crdownload临时文件却始终无法完成,大概率是上面某一个点没踩对,你挨个排查应该能解决。
备注:内容来源于stack exchange,提问作者devCodePro

