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

使用Selenium WebDriver Chrome无法打印页面至PDF的问题求助

问题:ChromeDriver执行window.print()时打印对话框弹出后立即关闭,无法保存PDF

我用以下命令尝试将多个网页打印为PDF:

driver.execute_script('window.print();')

但最近无法完成打印操作——打印对话框弹出后随即关闭,既没完成打印也没保存文件。

环境版本

  • 浏览器版本:112.0.5615.138
  • ChromeDriver版本:112.0.5615.49 (bd2a7bcb881c11e8cfe3078709382934e3916914-refs/branch-heads/5615@{#936})

我的Python代码

import os
import json
import logging
from selenium import webdriver

# 假设LocalPath是已定义的模块
class Scraper:
    def __init__(self, name: str = "default"):
        self.name = name
        self.download_dir = os.path.join(LocalPath.data_dir, self.name + "\\")
        logging.info("Init Driver")
        self.chrome_driver = self.start_webdriver()
        print(self.chrome_driver.page_source)
        logging.info("Driver Opened")

    def start_webdriver(self):
        options = webdriver.ChromeOptions()

        options.add_argument("--start-maximized")
        #options.add_argument("--disable-print-preview")
        options.add_argument('--kiosk-printing')
        #options.add_argument('--enable-print-browser')

        settings = {
            "recentDestinations": [{
                "id": "Save as PDF",
                "origin": "local",
                "account": "",
            }],
            "selectedDestinationId": "Save as PDF",
            "version": 2,
            "isHeaderFooterEnabled": False,
        }
        prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(settings),
                 'savefile.default_directory': self.download_dir,
                 "download.default_directory": self.download_dir,
                 "download.prompt_for_download": False,
                 "directory_upgrade": True}
        options.add_experimental_option('prefs', prefs)
        driver = webdriver.Chrome(executable_path=LocalPath.driver_path,
                                  options=options)
        return driver

解决方案

针对Chrome 112版本出现的这个问题,可尝试以下几种修复方式:

1. 补充打印配置参数

Chrome部分版本对打印预览的配置字段有更新,添加isLandscapeEnabled字段可修复对话框闪退问题:

settings = {
    "recentDestinations": [{
        "id": "Save as PDF",
        "origin": "local",
        "account": "",
    }],
    "selectedDestinationId": "Save as PDF",
    "version": 2,
    "isHeaderFooterEnabled": False,
    "isLandscapeEnabled": False  # 新增该字段
}

2. 启用--disable-print-preview参数

启用注释掉的--disable-print-preview,跳过打印预览直接触发PDF保存:

options.add_argument("--disable-print-preview")

启用后kiosk-printing会直接按配置保存文件,不再弹出预览对话框。

3. 等待页面完全加载后执行打印

页面未完全渲染时执行打印可能导致异常,添加显式等待确保页面加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 执行打印前等待页面主体加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "body"))
)
driver.execute_script('window.print();')

4. 确保ChromeDriver与浏览器版本完全匹配

当前浏览器版本为112.0.5615.138,建议使用同分支的ChromeDriver最新版本(如112.0.5615.121),版本细微差异可能引发兼容性问题。

5. 调整下载目录路径格式

确保下载目录为绝对路径,统一使用正斜杠或双反斜杠,避免路径解析错误:

self.download_dir = os.path.join(LocalPath.data_dir, self.name).replace("\\", "/")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:07:39