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

使用Selenium ChromeDriver无法将网页保存为PDF的问题

解决Selenium执行window.print()超时无法保存PDF的问题

直接调用window.print()会触发浏览器原生的打印对话框,这个对话框会阻塞JavaScript执行直到手动关闭,这就是你遇到超时的核心原因。而且Selenium无法直接控制这类原生弹窗,换用Chrome无头模式+内置打印参数直接生成PDF是更可靠的方案:

解决方案代码

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

# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--headless=new")  # 启用无头模式,避免弹窗干扰
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")

# 处理Windows路径,用原始字符串避免转义问题
pdf_path = r"C:\Test_Data\output.pdf"
# 配置打印参数,默认保存为PDF到指定路径
print_settings = {
    "recentDestinations": [
        {
            "id": "Save as PDF",
            "origin": "local",
            "account": ""
        }
    ],
    "selectedDestinationId": "Save as PDF",
    "version": 2,
    "isHeaderFooterEnabled": False,  # 可选:禁用默认页眉页脚
    "savePageAsPDF": pdf_path
}

# 将打印设置注入Chrome偏好设置
chrome_options.add_experimental_option("prefs", {
    "printing.print_preview_sticky_settings.appState": json.dumps(print_settings),
    "savefile.default_directory": pdf_path.rsplit("\\", 1)[0]  # 设置保存目录
})
chrome_options.add_argument("--kiosk-printing")  # 自动执行打印,不弹出确认框

# 启动浏览器并访问目标页面
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com")

# 触发打印操作(此时会直接生成PDF到指定路径,无弹窗)
driver.execute_script('window.print();')

# 等待PDF生成完成(根据页面复杂度调整等待时间)
driver.implicitly_wait(10)

driver.quit()

关键说明

  • 无头模式--headless=new既避免了浏览器窗口弹出,又能稳定支持打印功能
  • 通过Chrome的偏好设置printing.print_preview_sticky_settings.appState直接指定PDF保存规则,跳过手动弹窗操作
  • --kiosk-printing参数强制浏览器自动完成打印流程,不会阻塞JavaScript执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:12