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

Selenium+Java如何下载PDF文件并自定义存储路径与命名?

可行解决方案

方案1:配置ChromeDriver强制跳过PDF预览直接下载

该方案对现有测试流程改动最小,无需新增额外依赖,直接调整Chrome启动参数即可实现需求:

  1. 初始化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)
  1. 原有流程中点击「生成文档」按钮、拿到带UUID的PDF链接后,直接用当前已完成身份认证的driver访问该URL即可,PDF会自动下载到指定目录。

方案2:复用Selenium会话Cookie直接发起HTTP请求下载

该方案无需加载浏览器PDF页面,性能更高,还可以直接自定义保存的文件名,省去下载后重命名的步骤,更适配老旧测试套件的性能优化需求:

  1. 点击「生成文档」按钮、拿到带UUID的PDF链接后,提取当前Selenium会话的Cookie
  2. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:15:05