微软 Webwright:一个终端就够了,把 LLM 变成顶级浏览器 Agent
微软 Webwright:一个终端就够了,把 LLM 变成顶级浏览器 Agent
最近刷 GitHub 的时候发现微软开源了一个叫 Webwright 的项目,看了它的设计思路之后我直接愣住了——这么简单的东西居然这么好用?
项目地址:github.com/microsoft/Webwright
核心思路用一句话就能概括:别让 LLM 一步一步点网页了,给它一个终端,让它自己写 Python 脚本去操作浏览器。
听起来简单,但这个设计选择背后的洞察非常深刻。而且它真的有效——在两个主流 Web Agent 基准测试上都打到了开源第一。
本文提纲
- Webwright 是什么
- 核心设计:终端 + 浏览器 + 模型
- 为什么「写代码」比「点鼠标」强
- 性能表现:两个基准测试 SOTA
- 架构剖析:~1.5k 行代码做了什么
- 插件生态:Claude Code / Codex / Hermes 都能用
- 动手试一把
Webwright 是什么
Webwright 是微软研究院(Microsoft Research)在 2026 年 5 月开源的 Web Agent 框架。作者团队包括 Yadong Lu、Lingrui Xu、Chao Huang 和 Ahmed Awadallah。
它做的事情很直接:
- 给 LLM 一个终端环境
- LLM 在终端里写 Playwright Python 脚本来操作浏览器
- 浏览器可以随时启动、关闭、重启
- 最终产物是一个可复用的 Python 脚本,而不是一堆一次性的点击记录
没有 multi-agent 编排,没有复杂的图引擎,没有插件层,没有隐藏的调度逻辑。就三样东西:一个终端、一个浏览器、一个模型。
核心设计:终端 + 浏览器 + 模型
传统的 Web Agent 是这么工作的:
模型收到页面状态 → 预测下一步动作(点击/输入/滚动)→ 执行 → 再看页面 → 再预测...一个动作一个动作地蹦,像键盘精灵回放。
Webwright 换了个思路:把浏览器当成可随时启动的环境,而不是 Agent 的持久状态。Agent 的真正工作空间是本地文件——代码、截图、日志。
它的循环长这样:
写代码 → 执行 → 看截图 → 发现问题 → 修代码 → 再执行 → 直到任务完成这跟人类工程师写 RPA 脚本的工作方式一模一样:写一段代码,跑一下看效果,不对就改,改完再跑。
为什么「写代码」比「点鼠标」强
这是 Webwright 最关键的洞察,展开说说。
第一,代码天然支持复杂逻辑组合。 选日期、填表单、切换标签页这些多步操作,在传统 Web Agent 里需要一步一步预测,每一步都可能出错。而用代码,一个函数调用就搞定了。循环、条件判断、异常处理这些编程语言的原生能力,Agent 直接拿来用。
第二,出错概率低得多。 Playwright 通过 CSS 选择器和 XPath 定位元素,比像素级点击靠谱得多。懒加载、动态渲染这些坑,Playwright 自带等待机制处理。
第三,产物可复用。 传统 Agent 完成任务后留下一堆动作日志,下次做同样的事还得从头来。Webwright 完成任务后留下一个 Python 脚本,改改参数就能复用。就像 RPA 一样——调试一次,跑无数次。
第四,可以同时开多个浏览器。 传统方案只有一个持久浏览器会话。Webwright 的 Agent 可以在代码里随时启动新的浏览器实例,并行处理多个子任务。
性能表现:两个基准测试 SOTA
数字说话,Webwright 在两个真实的网页任务基准上表现很强:
Online-Mind2Web(300 个任务,136 个真实网站):
| 模型 | 准确率 |
|---|---|
| GPT-5.4 + Webwright | 86.7% |
| Claude Opus 4.7 + Webwright | 84.7% |
| GPT-5.4 坐标预测基线 | 明显低于 Webwright |
86.7% 是 Online-Mind2Web AutoEval 类别中开源 harness 的最高成绩。值得注意的是,在困难任务上 Claude Opus 4.7 反而比 GPT-5.4 强(80.5% vs 76.6%)。
Odysseys(200 个长程任务,平均 272 字的任务描述):
| 方案 | 准确率 | 平均步数 |
|---|---|---|
| GPT-5.4 + Webwright | 60.1% | 76.1 |
| 之前 SOTA(Opus 4.6 视觉方案) | 44.5% | 81.3 |
| GPT-5.4 坐标预测基线 | 33.5% | — |
60.1% 比之前的 SOTA 高出 15.6 个百分点,比 GPT-5.4 的基线高出 26.6 个百分点。这就是「代码即动作」的威力。
成本方面: GPT-5.4 平均每个任务 $2.37,产出的是一个可复用的脚本。Claude Opus 4.7 平均每任务 $6.09(步骤更少但 token 更贵)。
小模型也能打: 配合预制的工具脚本,Qwen-3.5-9B 在有 5+ 工具的网站上也表现不错。说明工具复用可以大幅降低对模型能力的要求。
架构剖析:~1.5k 行代码做了什么
Webwright 的代码量少得惊人:
| 模块 | 行数 | 说明 |
|---|---|---|
| 核心 Agent 循环 | ~450 行 | 写代码→执行→观察→修复 |
| Playwright 环境 | ~570 行 | 浏览器启动、截图、页面操作 |
| CLI 入口 | ~150 行 | 命令行参数、配置加载 |
| 模型后端 | 每个 ~150-200 行 | OpenAI / Anthropic / OpenRouter |
依赖只有四个:httpx、pydantic、playwright、typer。没有 LangChain,没有复杂的中间件。
项目结构:
webwright/
├── src/webwright/
│ ├── run/cli.py # CLI 入口
│ ├── agents/default.py # 核心 Agent 循环
│ ├── environments/ # Playwright 浏览器工作区
│ ├── tools/ # image_qa, self_reflection
│ ├── models/ # openai_model, anthropic_model
│ ├── config/ # base.yaml, model_openai.yaml...
│ └── utils/
├── assets/task_showcase/ # Flask 任务展示面板
├── tests/
└── outputs/ # 运行产物(轨迹、截图)两个关键工程细节值得一提:
自我反思门控(Self-reflection Gate):模型经常在任务没完成时就声称「完成了」。Webwright 加了一道检查——Agent 必须生成一个自我评估配置,在全新环境中运行最终脚本,通过自己的「成功/失败」判断后才能标记完成。否则丢掉完成标记,重新尝试。
历史压缩(Context Compaction):长的编码轨迹很快会撑爆上下文窗口。Webwright 每 20 步把历史压缩成一条摘要,保持上下文可控。
插件生态:Claude Code / Codex / Hermes 都能用
这是 Webwright 另一个让我觉得用心的地方——它不只是一个独立框架,还设计了完整的插件系统,可以嵌入到主流 AI 编程工具中:
Claude Code:
/plugin marketplace add microsoft/Webwright
/plugin install webwright@webwright装完直接用自然语言驱动,或者用 /webwright:run 执行一次性任务,/webwright:craft 生成可复用的参数化脚本。
OpenAI Codex:
codex plugin marketplace add microsoft/WebwrightCodex 兼容 Claude 风格的插件市场,同一个仓库直接用。
Hermes Agent:
ln -sfn /path/to/Webwright/skills/webwright ~/.hermes/skills/webwrightHermes 是 skills-compatible 客户端,直接 symlink 就能用。
OpenClaw:
openclaw plugins install /path/to/Webwright这意味着你在 Claude Code 里跟 Webwright 对话,它就能帮你自动搜索机票、填写表单、抓取数据——而且最终产物是一段你可以留着以后再用的 Python 脚本。
动手试一把
安装很简单:
pip install -e .
playwright install chromium运行一个任务:
python -m webwright.run.cli \
-c base.yaml -c model_openai.yaml \
-t "Search for flights from SEA to JFK on 2026-08-15 to 2026-08-20" \
--start-url https://www.google.com/flights \
--task-id demo_openai \
-o outputs/defaultWebwright 还支持 Task2UI 模式——完成任务后自动把结果渲染成一个 HTML 页面,方便查看和复用。
还有一个 Flask 写的 Task Showcase 面板,可以把 Webwright 的运行结果做成一个可浏览的 dashboard:
pip install flask
python assets/task_showcase/app.py # http://127.0.0.1:5005微软研究院在博客里说了一句我很认同的话:less can be more。随着模型能力越来越强,过度工程化的 Agent 框架反而成了瓶颈。一个终端、一个浏览器、一个模型,把选择权交给模型自己——这个方向值得认真思考。
作者: itech001
来源: 公众号:AI人工智能时代
网站: https://www.theaiera.cn/
每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。