Selenium 4搭配geckodriver实现HTML5网页自定义尺寸转PDF的方案咨询
Firefox(geckodriver)自定义页面尺寸网页转PDF实现方案
前置要求
- 依赖版本要求:Firefox ≥ 112、geckodriver ≥ 0.32.0,低于该版本不兼容CDP打印相关接口
- 必须开启Firefox无头模式,否则PDF生成功能无法生效
等效实现代码
import base64 from selenium import webdriver from selenium.webdriver.firefox.options import Options def save_as_pdf(driver, path, options={}): # Selenium 4内置CDP调用方法,自动兼容不同浏览器的底层接口差异 result = driver.execute_cdp_cmd("Page.printToPDF", options) if result: with open(path, 'wb') as f: f.write(base64.b64decode(result['data'])) return True return False # 初始化Firefox配置 firefox_options = Options() # 必须开启无头模式 firefox_options.add_argument("--headless") # 初始化驱动:Selenium 4.6+版本支持自动管理驱动,可省略executable_path参数 driver = webdriver.Firefox( executable_path='/usr/local/bin/geckodriver', options=firefox_options ) # 访问目标页面 driver.get('https://example.my') # 模拟screen媒体类型,和Chrome端配置逻辑一致 driver.execute_cdp_cmd("Emulation.setEmulatedMedia", {'media': 'screen'}) # PDF参数可直接复用原有Chrome端的配置,paperHeight、paperWidth单位均为英寸 pdf_options = { 'paperHeight': 92, 'paperWidth': 8, 'printBackground': True } save_as_pdf(driver, 'myfilename.pdf', pdf_options) # 退出驱动释放资源 driver.quit()
注意事项
- 如果你希望保持和原有Chrome版完全一致的手工封装请求的写法,只需将
send_devtools方法中的资源路径修改为/session/%s/moz/cdp/send_command即可,其余逻辑无需变动 - 如遇到背景色/背景图无法打印的问题,升级Firefox到最新稳定版即可解决
内容的提问来源于stack exchange,提问作者Madamadam
相关产品推荐
相关产品推荐

