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

Python使用Selenium调用Chrome打印无法保存完整正常PDF如何解决

Selenium导出正常可编辑PDF的解决方法

问题原因

你当前使用的window.print()配合kiosk打印的方式,在部分场景下会将可视区域截图后生成PDF,无法输出矢量可复制文本的完整PDF,且容易出现内容截断问题。

推荐解决方案:使用Chrome DevTools Protocol(CDP)原生打印接口

该方法直接调用Chrome内核的PDF生成能力,输出的是标准矢量PDF,支持文本选中、格式完整,不会生成截图版文件,修改后的代码如下:

import json
import base64
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
# 配置默认保存路径,注意Windows路径转义用双反斜杠或者正斜杠
save_path = "D:/Documents/PycharmProjects/projects/Manipule_PDF/output.pdf"
chrome_options.add_experimental_option('prefs', {
    "savefile.default_directory": "D:/Documents/PycharmProjects/projects/Manipule_PDF"
})
# 可以开启无头模式不影响生成
# chrome_options.add_argument("--headless=new")

driver = webdriver.Chrome(r"D:\Documents\chrome\chromedriver.exe", options=chrome_options)
url = "你要访问的目标页面地址"
driver.get(url)

# 等待页面完全加载,可根据实际需求调整等待逻辑,比如等待特定元素出现
driver.implicitly_wait(10)

# 调用CDP的打印接口,可自定义参数控制PDF格式
pdf_params = {
    "landscape": False, # 横向打印设为True
    "displayHeaderFooter": False, # 不显示页眉页脚
    "printBackground": True, # 打印背景颜色和图片
    "preferCSSPageSize": True, # 优先使用页面定义的页面大小
    "marginTop": 0,
    "marginBottom": 0,
    "marginLeft": 0,
    "marginRight": 0
}
result = driver.execute_cdp_cmd("Page.printToPDF", pdf_params)

# 把返回的base64内容写入PDF文件
with open(save_path, "wb") as f:
    f.write(base64.b64decode(result['data']))

driver.quit()

额外优化建议

  • 如果页面存在懒加载内容,执行打印前先模拟滚动到页面底部,确保所有内容都加载完成,避免出现空白区域
  • 可以根据实际需要调整pdf_params中的参数,比如纸张大小、边距、是否打印背景等,实现自定义PDF格式
  • 如果需要批量生成PDF,可复用driver实例,不用每次重启浏览器提升效率

内容的提问来源于stack exchange,提问作者MD Monteiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:39:03