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

如何用Python的pyppeteer重放Chrome录制器导出的JSON脚本

使用Pyppeteer重放Chrome录制器导出的JSON脚本

Chrome录制器导出的JSON是基于JS版Puppeteer的指令格式,Pyppeteer作为它的Python封装,你可以通过两种方式实现重放:

方法1:手动转换JSON指令为Pyppeteer代码

JSON里的每个步骤都对应Puppeteer的API,直接转换成Pyppeteer的Python写法即可:

  • 导航操作{"type": "navigate", "url": "https://example.com"} → await page.goto("https://example.com")
  • 点击操作{"type": "click", "selectors": ["button#submit"]} → await page.click("button#submit")
  • 输入操作{"type": "type", "selectors": ["input#username"], "text": "test"} → await page.type("input#username", "test")

示例代码:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False)
    page = await browser.newPage()
    # 替换成你导出的JSON步骤
    steps = [
        {"type": "navigate", "url": "https://example.com"},
        {"type": "click", "selectors": ["h1"]}
    ]
    for step in steps:
        if step["type"] == "navigate":
            await page.goto(step["url"])
        elif step["type"] == "click":
            # 取最后一个备选选择器(Chrome录制会生成多个)
            await page.click(step["selectors"][-1])
        # 可扩展type、waitForSelector等其他操作类型
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

方法2:自动解析JSON文件执行

写一个解析函数,自动识别JSON里的操作类型并调用对应Pyppeteer方法,无需手动转换:

import asyncio
import json
from pyppeteer import launch

async def execute_step(page, step):
    step_type = step["type"]
    if step_type == "navigate":
        await page.goto(step["url"], waitUntil="networkidle2")
    elif step_type == "click":
        selector = step["selectors"][-1]
        await page.waitForSelector(selector)
        await page.click(selector)
    elif step_type == "type":
        selector = step["selectors"][-1]
        await page.waitForSelector(selector)
        await page.type(selector, step["text"], delay=step.get("delay", 100))
    elif step_type == "waitForSelector":
        await page.waitForSelector(step["selectors"][-1])
    # 根据录制的操作类型继续补充其他case

async def replay_json(json_path):
    browser = await launch(headless=False)
    page = await browser.newPage()
    with open(json_path, "r", encoding="utf-8") as f:
        steps = json.load(f)
    for step in steps:
        await execute_step(page, step)
    await asyncio.sleep(2)  # 留时间查看结果,可删除
    await browser.close()

if __name__ == "__main__":
    # 替换成你的JSON文件路径
    asyncio.get_event_loop().run_until_complete(replay_json("your_recording.json"))

注意事项

  • 忽略JSON里的target参数,直接用页面对象操作即可
  • 对需要等待的操作,添加waitForSelector或waitForNavigation,避免页面未加载完成就执行下一步
  • 若录制时用了特定窗口大小,可在newPage后添加await page.setViewport({"width": 1920, "height": 1080})还原

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:30:28