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

