用途:Webwright 用于解决用户指定的网页任务,采用“代码即动作”的方式,通过一次一条 bash 命令驱动本地 Playwright 浏览器,并保存截图与动作日志。它是 Claude Code 适配版:原本由 LLM 循环每轮输出一个 JSON 包裹的 bash_command,在 Claude Code 中直接用 Bash 工具替代该循环,无需把输出包成 JSON。
主要能力:保留工作区契约(plan.md、final_runs/run_<id>/ 目录、带埋点的 final_script.py、截图、动作日志),但用 Claude Code 自身能力替代 OpenAI 驱动的 image_qa 与 self_reflection:用 Read 读取 PNG,并自行对照 plan.md 验证成功。无需 OPENAI_API_KEY 或其他模型 API 密钥。
模式:默认一次性模式,final_script.py 按用户给出的字面值解决任务,由普通提示或 /webwright:run <task> 触发;CLI 工具模式(参数化),final_script.py 成为可复用 CLI,含 Google 风格 Args: 文档字符串的函数与 argparse 包装,标志默认值为具体任务值,由 /webwright:craft <task> 或用户要求“参数化”“可复用”“转成 CLI”时触发。
前置条件:在 Webwright 仓库根目录执行 playwright install firefox。本技能不需要 API 密钥。
工作区契约:选择 WORKSPACE_DIR(如 outputs/<task_id>/)并只在此工作;最终产物路径为 final_script.py;每次干净执行放在各自的 final_runs/run_<id>/ 文件夹,<id> 为大于现有 run_* 的整数;每个 run 文件夹内含 final_script.py、screenshots/final_execution_<step_number>_<action>.png、final_script_log.txt(每次干净运行开始时重置,每个约束相关交互写一行 step <n> action: <reason and action>,末尾打印最终数据)。浏览器为本地模式:每次 Playwright 运行通过 playwright.firefox.launch(headless=True) 启动全新 Firefox,无持久浏览器状态;使用 Firefox 而非 Chromium 是因为部分站点在 Chromium 下因 TLS/H2 指纹出现 ERR_HTTP2_PROTOCOL_ERROR。始终使用 viewport={"width": 1280, "height": 1800},绝不调用 page.screenshot(full_page=True)。
工作流:规划(把任务解析为编号的关键点清单写入 plan.md,每个 CP 可独立由截图或日志行验证);探索(运行临时 Playwright 脚本发现稳定选择器,用 Read 查看 PNG,打印 ARIA 快照、URL、标题与可见标签);在新的 final_runs/run_<id>/ 中编写并埋点 final_script.py;执行一次并捕获 stdout/stderr;自验证(逐条走 plan.md,为每个 CP 找到截图路径和/或日志行证据,读取 PNG 确认无歧义,证据具体才勾选,失败则诊断、修复、在 run_<id+1>/ 重跑并重新验证);全部 CP 勾选后才完成并报告最终数据。
硬性规则:每步一条 bash 命令,观察输出后再发下一条;使用稳定选择器与当前运行证据,不猜测 UI 状态;站点若有专用控件必须使用,搜索框查询不能满足显式筛选、排序、样式或属性要求;排名语言必须基于站点实际排序/筛选;数值、日期、数量与单位约束必须精确;选中状态在抽屉/折叠/弹窗/下拉关闭后隐藏时,需重新打开或先捕获可见 chip/摘要;部分必需筛选位于可展开区域、抽屉、下拉或移动筛选面板后,需打开再检查;阻塞声明需有来自实际站点 UI 的反复证据;任务要求最终数据时须明确告知用户并追加到 final_script_log.txt;不要用 pip/apt 安装额外包;final_script.py 存在后优先增量编辑。
参考文件:reference/playwright_patterns.md、reference/workflow.md、reference/cli_tool_mode.md。斜杠命令:/webwright:run <task>、/webwright:craft <task>,为便捷模板,技能也会在意图匹配时自动激活。
限制:资料未提供具体收费、价格、支持平台范围或效果数据。