使用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
相关产品推荐
相关产品推荐

