Selenium+Java如何下载PDF文件并自定义存储路径与命名?
可行解决方案
方案1:配置ChromeDriver强制跳过PDF预览直接下载
该方案对现有测试流程改动最小,无需新增额外依赖,直接调整Chrome启动参数即可实现需求:
- 初始化ChromeDriver时添加以下偏好配置,禁用浏览器内置PDF预览器,触发PDF自动下载到指定目录
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 启用无头模式 chrome_options.add_argument("--headless=new") # 配置下载偏好 prefs = { # 禁用PDF预览,直接触发下载 "plugins.always_open_pdf_externally": True, # 指定下载文件夹路径,替换为实际目标路径 "download.default_directory": "/path/to/your/target/folder", # 关闭下载弹窗提示 "download.prompt_for_download": False, # 测试环境自签证书场景可添加该配置放行下载 "download.allow_dangerous_downloads": True } chrome_options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(options=chrome_options)
- 原有流程中点击「生成文档」按钮、拿到带UUID的PDF链接后,直接用当前已完成身份认证的driver访问该URL即可,PDF会自动下载到指定目录。
方案2:复用Selenium会话Cookie直接发起HTTP请求下载
该方案无需加载浏览器PDF页面,性能更高,还可以直接自定义保存的文件名,省去下载后重命名的步骤,更适配老旧测试套件的性能优化需求:
- 点击「生成文档」按钮、拿到带UUID的PDF链接后,提取当前Selenium会话的Cookie
- 用HTTP请求库携带该Cookie发起GET请求,直接保存响应内容到本地
import requests # 从已完成登录的Selenium driver中提取会话Cookie cookies = driver.get_cookies() request_session = requests.Session() for cookie in cookies: request_session.cookies.set(cookie['name'], cookie['value']) # 发起PDF下载请求 pdf_response = request_session.get("你的带UUID的PDF完整URL") # 校验请求成功 if pdf_response.status_code == 200: # 直接保存为自定义名称的PDF,替换为实际需要的文件名和路径 with open("/path/to/your/target/folder/自定义文件名.pdf", "wb") as f: f.write(pdf_response.content)
注意事项
- 如果服务端有CSRF校验,可从当前Selenium页面的请求头或页面Meta标签中提取CSRF Token,放到HTTP请求的headers中即可正常访问
- 可添加简单的轮询逻辑,确认文档生成完成后再发起下载请求:每隔1-2秒请求一次PDF URL,直到返回200状态码再执行保存操作,避免拿到未完成生成的错误资源
内容的提问来源于stack exchange,提问作者gtludwig
相关产品推荐
相关产品推荐

