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

Python Selenium实现网页转PDF:指定文件名与存储路径

使用Selenium控制Chrome保存PDF的文件名和路径

你可以通过调整Chrome的打印配置参数,实现指定PDF文件名和存储路径的需求,以下是修改后的完整代码及关键说明:

修正后的代码

import os
import json
from selenium import webdriver

# 获取系统用户名(修正原代码变量名笔误)
user_name = os.environ.get('username')
options = webdriver.ChromeOptions()

# 自定义文件名和存储路径
custom_file_name = "自定义文档.pdf"
save_directory = f"C:\\Users\\{user_name}\\Documents\\mr\\"

# 确保目标存储目录存在,避免因目录不存在导致保存失败
os.makedirs(save_directory, exist_ok=True)

# 配置Chrome打印预览的持久化设置
print_settings = {
    "recentDestinations": [{
        "id": "Save as PDF",
        "origin": "local",
        "account": "",
        "filename": custom_file_name  # 指定PDF文件名
    }],
    "selectedDestinationId": "Save as PDF",
    "version": 2,
    "saveToLocalPath": save_directory  # 指定存储目录
}

# 配置Chrome偏好设置
prefs = {
    'printing.print_preview_sticky_settings.appState': json.dumps(print_settings),
    "download.default_directory": save_directory,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "plugins.always_open_pdf_externally": True
}

options.add_experimental_option('prefs', prefs)
options.add_argument('--kiosk-printing')

# 初始化驱动并访问目标页面
driver = webdriver.Chrome(options=options)
driver.get("https://your-target-url.com")  # 替换为你的目标网页

# 执行打印操作,自动保存为配置好的PDF
driver.execute_script('window.print();')

# 关闭浏览器驱动
driver.quit()

关键修改点说明

  • 修正变量名笔误:原代码中ser_name应为user_name,否则会触发未定义变量错误
  • 强制确保目录存在:通过os.makedirs(save_directory, exist_ok=True)自动创建不存在的目录,避免保存失败
  • 指定文件名:在print_settings的recentDestinations对象中添加"filename"字段,直接定义PDF的保存文件名
  • 锁定存储路径:同时配置saveToLocalPath和download.default_directory,确保Chrome将PDF保存到指定目录
  • 静默打印:--kiosk-printing参数让Chrome跳过打印预览弹窗,直接按配置完成保存

注:如果不同Chrome版本出现配置不生效的情况,可以手动打开Chrome打印预览并完成一次PDF保存,然后导出Chrome的打印设置JSON,对比调整配置结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:19:57