如何用Selenium实现Firefox网页的简化打印格式PDF导出?
问题:Firefox通过Selenium导出网页简化格式PDF失败
尝试使用Selenium在Firefox中访问链接并导出简化格式的PDF,但当前代码只能导出原始格式PDF,设置print.use_simplify_page后无效果。手动操作时可通过Firefox打印选项选择“简化”格式实现需求。
当前可导出原始格式PDF的代码:
from time import sleep from helium import start_firefox from selenium.webdriver import FirefoxOptions options = FirefoxOptions() options.add_argument("--start-maximized") options.set_preference("print.always_print_silent", True) options.set_preference("print.printer_Mozilla_Save_to_PDF.print_to_file", True) options.set_preference("print_printer", "Mozilla Save to PDF") options.set_preference("print.use_simplify_page", True) # 此设置未生效 driver = start_firefox("https://www.hsph.harvard.edu/nutritionsource/selenium/", options=options, headless = True) driver.execute_script("window.print();") sleep(10) # 需等待渲染,否则文件损坏 driver.quit()
解决方案
Firefox的print.use_simplify_page偏好设置仅对手动触发的打印对话框生效,通过window.print()调用时不会自动启用简化模式。可通过以下两种方式实现需求:
方法1:通过JavaScript指定打印配置
直接调用Firefox的打印API,强制启用简化页面选项:
from time import sleep from helium import start_firefox from selenium.webdriver import FirefoxOptions options = FirefoxOptions() options.add_argument("--start-maximized") options.set_preference("print.always_print_silent", True) options.set_preference("print.printer_Mozilla_Save_to_PDF.print_to_file", True) options.set_preference("print_printer", "Mozilla Save to PDF") driver = start_firefox("https://www.hsph.harvard.edu/nutritionsource/selenium/", options=options, headless = True) # 用JS配置打印参数,启用简化模式 driver.execute_script(""" const printOptions = { isSimplified: true, silent: true, destination: 'saveas', filename: 'selenium_simplified.pdf' }; window.print(printOptions); """) sleep(10) driver.quit()
方法2:设置默认打印配置
如果需要批量处理所有链接,可配置Firefox默认打印模式为简化格式:
from time import sleep from helium import start_firefox from selenium.webdriver import FirefoxOptions options = FirefoxOptions() options.add_argument("--start-maximized") options.set_preference("print.always_print_silent", True) options.set_preference("print.printer_Mozilla_Save_to_PDF.print_to_file", True) options.set_preference("print_printer", "Mozilla Save to PDF") # 设置默认打印配置为简化模式 options.set_preference("print.default_print_config", "{\"isSimplified\":true}") driver = start_firefox("https://www.hsph.harvard.edu/nutritionsource/selenium/", options=options, headless = True) driver.execute_script("window.print();") sleep(10) driver.quit()
说明
- 方法1灵活性更高,可针对单个打印任务自定义参数;
- 方法2适合批量处理场景,所有打印任务默认使用简化格式;
- 确保使用Firefox较新稳定版,旧版本可能不支持
isSimplified参数。
内容的提问来源于stack exchange,提问作者Shreyas Rajesh
相关产品推荐
相关产品推荐

