Playwright Codegen 是交互式录制工具,用于自动生成多语言自动化脚本;启动命令为 playwright codegen --target python --output my_script.py --timeout 60000,需手动启用 iframe/弹窗录制、补全等待逻辑与初始化代码,并注意视频录制需额外配置且依赖 context.close() 才能保存。

playwright codegen 命令在 Playwright 1.40 中没有新增语法或核心逻辑,所谓“新特性”其实是已有能力的稳定强化——它仍基于同一套录制引擎,但默认行为更贴近真实运行环境,对动态页、iframe、弹窗等场景的兼容性比旧版本(如 1.20 之前)更可靠。直接用老命令就能获得更好体验,关键在参数和后续处理。
怎么启动录制并指定 Python 输出
playwright codegen 默认输出就是 Python,但显式声明 --target python 能避免某些 CI 环境或插件干扰导致语言错配:
• 必须加 --output my_script.py,否则关掉浏览器脚本就丢了
• 推荐加 --timeout 60000,防止操作稍慢时录制中断
• 若目标页需登录态,先用 playwright open --load-storage=auth.json https://example.com 验证能进,再用 --load-storage=auth.json 启动录制,否则登录流程会卡在跳转后空白页
iframe 和弹窗操作为什么录不到
Playwright Inspector UI 右上角齿轮图标里有个「Record in iframes」开关,默认关闭。不勾选,所有 iframe 内点击、输入都不会生成代码;同理,页面弹出dialog(如 alert()、confirm())也不会被监听。
• 录制前务必打开该选项,尤其测管理后台、嵌入式仪表盘类页面
• 即使录到了 iframe 内操作,生成的 page.frame_locator() 也常缺等待逻辑,需手动补 .wait_for_selector()
• page.on("dialog") 事件监听不会自动生成,必须在 context = browser.new_context() 后立即添加
生成的脚本为什么一跑就报 TimeoutError
codegen 输出的是“操作快照”,不是可执行测试。它不包含:
• browser = playwright.chromium.launch(...) 和 context = browser.new_context() 的初始化
• page.wait_for_load_state("networkidle") 或 page.wait_for_timeout(1000) 等等待机制
• 对 page.goto() 后 URL 变化、重定向、SPA 路由跳转的容错处理
• 元素定位器健壮性:比如 page.get_by_role("button", name="提交") 在按钮文字加空格或换行后立即失效,应优先改用 page.locator('button:has-text("提交")') 或带 data-testid 的选择器
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
录制视频和脚本能不能一起做
不能。playwright codegen 本身不支持边录脚本边存视频。视频录制依赖 browser.new_context(record_video_dir="videos/"),而 codegen 是独立 CLI 工具,不暴露上下文创建入口。想留证+调试,得两步走:
• 先用 codegen 快速生成操作骨架
• 再把生成的代码套进完整执行模板里,加上 record_video_dir 参数,并确保最后调用 context.close()
立即学习“Python免费学习笔记(深入)”;
真正容易被忽略的是:视频只在context.close() 被调用后才写入磁盘,如果脚本中途异常退出没走到这一步,视频文件就是空的。

















