You need to enable JavaScript to run this app. 使用Selenium实现网页自动导出彩色PDF到Python脚本同目录的方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium实现网页自动导出彩色PDF到Python脚本同目录的方法咨询

Selenium 自动化生成彩色PDF到脚本同级目录的实现方案

核心思路

手动按Ctrl+P唤起的是操作系统原生打印窗口,Selenium本身没有权限直接操作这类系统级控件,硬写模拟按键点弹窗的方案稳定性极差。最落地的实现路径是直接调用Chrome浏览器内置的DevTools打印协议,跳过所有预览、弹窗交互环节,直接完成彩色PDF生成、本地存储的全流程。

具体实现步骤

1. 配置Chrome启动参数,锚定存储路径

提前把浏览器的默认下载、另存为路径锁定为当前Python脚本的同级目录,关闭所有会打断自动化流程的系统弹窗:

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 获取当前Python脚本的绝对路径所在文件夹,避免相对路径定位偏差
current_script_dir = os.path.dirname(os.path.abspath(__file__))

chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    # 锁定默认下载路径为脚本同级目录
    "download.default_directory": current_script_dir,
    # 关闭“选择下载路径”的系统弹窗
    "download.prompt_for_download": False,
    # 浏览器打印预览默认选中“另存为PDF”选项
    "printing.print_preview_sticky_settings.appState": '{"recentDestinations":[{"id":"Save as PDF","origin":"local","account":""}],"selectedDestinationId":"Save as PDF","version":2}',
    # 锁定“另存为文件”的默认路径为脚本同级目录
    "savefile.default_directory": current_script_dir
})
# 可选:开启无界面模式,运行时不会弹出浏览器窗口
# chrome_options.add_argument("--headless=new")

driver = webdriver.Chrome(options=chrome_options)

2. 调用CDP打印接口,配置彩色输出参数

不需要等待打印预览窗口加载,直接通过Chrome的内部调试协议触发打印动作,传入对应的彩色渲染参数,直接拿到PDF的二进制内容写入本地:

# 打开目标待打印的网页
driver.get("替换为你的目标网页地址")
# 等待页面内容加载完成,避免生成的PDF存在内容缺失
driver.implicitly_wait(5)

# 核心打印参数配置
print_params = {
    "landscape": False, # 默认纵向排版,需要横向打印可改为True
    "displayHeaderFooter": False, # 自动去掉浏览器默认添加的页眉页脚
    "printBackground": True, # 必须开启:否则网页的彩色背景、图片会被过滤成黑白
    "color": True, # 核心配置:开启彩色输出模式,默认值为False即黑白打印
    "paperWidth": 8.27, # A4纸宽度,单位为英寸
    "paperHeight": 11.69, # A4纸高度,单位为英寸
    "margin": {"top": "0.4", "bottom": "0.4", "left": "0.4", "right": "0.4"} # 页边距调整
}
# 执行打印命令获取PDF数据
pdf_binary = driver.execute_cdp_cmd("Page.printToPDF", print_params)

# 把生成的PDF直接写入脚本同级目录
save_file_path = os.path.join(current_script_dir, "auto_exported.pdf")
with open(save_file_path, "wb") as output_file:
    output_file.write(pdf_binary["data"].encode("latin1"))

# 流程结束后关闭浏览器
driver.quit()

实操注意事项

  • 不要硬写模拟Ctrl+P按键、点击预览窗口元素的逻辑:Chrome的打印预览窗口属于Shadow DOM结构,元素定位的稳定性极差,随Chrome版本迭代很容易失效,CDP接口的方式不受前端页面结构、小版本更新的影响,长期运行的可靠性更高。
  • 彩色PDF生效的两个必要条件:除了把color参数设为True,必须同步开启printBackground: True,否则网页上的彩色色块、带背景的彩色按钮、彩色图片都会被浏览器默认替换成灰度内容,达不到彩色打印的效果。
  • 路径定位的稳定性注意:不要用相对路径./指向脚本目录,一定要用os.path.abspath(__file__)获取脚本所在的绝对路径,避免脚本被其他程序从不同工作目录调用时,生成的PDF被存到错误的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 01:36:04