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

无需录屏:如何从网页批量捕获高清PDF帧序列?

问题解答:网页动画批量生成高清PDF帧

1. 脚本无法保存PDF到指定文件夹的原因

你的脚本失败主要是几个配置和逻辑问题:

  • 打印机名称设置错误:Firefox内置的"保存为PDF"打印机名称是Mozilla Save to PDF,你写的print.printer_PDF是无效的,应该替换为print.print_printer来指定正确的打印机。
  • 路径格式冲突:Windows反斜杠路径在Firefox偏好中可能解析异常,建议改用正斜杠格式。
  • 重复配置冗余:你重复设置了print.print_to_file,会干扰配置生效。
  • 按键监听上下文冲突:keyboard库的全局按键监听和Selenium的浏览器进程上下文不兼容,可能导致触发逻辑失效。

修正后的核心配置代码:

# 修正后的Firefox偏好设置
options = Options()
options.set_preference("print.always_print_silent", True)
options.set_preference("print.show_print_progress", False)
options.set_preference("print.print_to_file", True)
options.set_preference("print.save_print_settings", True)
options.set_preference("print.print_printer", "Mozilla Save to PDF")  # 正确打印机名称
options.set_preference("print.print_file_name", save_path.replace("\\", "/"))  # 转义为正斜杠路径

2. 自动捕获30个动画帧PDF的更优方式

放弃手动按键,改用动画进度控制+自动批量打印的逻辑:

  1. 控制Flourish动画进度:Flourish的动画内置了JS控制接口,通过Selenium执行JS代码可以精准设置动画进度(比如从0到1分成30个节点)。
  2. 循环生成帧文件:遍历30个进度节点,每个节点等待动画渲染完成后,修改PDF保存文件名(避免覆盖),自动触发打印。

示例核心逻辑代码:

# 封装动画进度控制函数(需根据你的页面实际JS对象调整)
def set_animation_progress(driver, progress):
    driver.execute_script("""
        // 替换为你页面中控制动画进度的实际代码
        window.flourishAnimation.setProgress(arguments[0]);
    """, progress)

# 批量生成30帧PDF
for frame_num in range(30):
    # 设置当前帧的动画进度(0到1均匀分布)
    progress = frame_num / 29
    set_animation_progress(driver, progress)
    time.sleep(0.5)  # 等待动画渲染稳定
    
    # 生成当前帧的保存路径
    current_save_path = save_path.replace(".pdf", f"_{frame_num+1:02d}.pdf")
    driver.execute_script(f"""
        window.printSettings.print_file_name = "{current_save_path.replace("\\", "/")}";
    """)
    
    # 触发打印
    driver.execute_script("window.print();")
    time.sleep(1)  # 等待PDF生成完成

3. 生成PDF帧序列的工具/脚本方案

  • Playwright(推荐):比Selenium更易用,内置直接生成PDF的API,无需依赖浏览器打印对话框,稳定性更高。示例代码:
from playwright.sync_api import sync_playwright
import time

html_file_path = r"E:\Desktop\New folder (4)\20250309101616805.html"
output_dir = r"E:\Desktop\New folder (4)\New folder"

with sync_playwright() as p:
    browser = p.firefox.launch(headless=True)
    page = browser.new_page()
    page.goto(f"file:///{html_file_path.replace('\\', '/')}")
    time.sleep(2)  # 等待页面加载
    
    for frame_num in range(30):
        progress = frame_num / 29
        # 设置动画进度
        page.evaluate("window.flourishAnimation.setProgress(arguments[0])", progress)
        time.sleep(0.5)
        # 直接生成高清PDF
        page.pdf(
            path=f"{output_dir.replace('\\', '/')}/output_{frame_num+1:02d}.pdf",
            print_background=True,
            scale=2  # 提高分辨率,按需调整
        )
    
    browser.close()
  • Headless Chrome/Edge:通过Chrome DevTools Protocol(CDP)调用打印接口,同样支持批量生成PDF帧。
  • Flourish内置导出:检查Flourish Studio的付费计划是否支持直接导出动画帧序列,部分计划提供高清帧导出功能,无需自行编写脚本。

内容的提问来源于stack exchange,提问作者Pubg Mobile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:23:09