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

