返回博客列表

微软 Webwright:一个终端就够了,把 LLM 变成顶级浏览器 Agent

2026-05-27T09:11:00+08:00
WebwrightMicrosoftBrowser-AgentPlaywrightLLMWeb-Automation

微软 Webwright:一个终端就够了,把 LLM 变成顶级浏览器 Agent

最近刷 GitHub 的时候发现微软开源了一个叫 Webwright 的项目,看了它的设计思路之后我直接愣住了——这么简单的东西居然这么好用?

项目地址:github.com/microsoft/Webwright

核心思路用一句话就能概括:别让 LLM 一步一步点网页了,给它一个终端,让它自己写 Python 脚本去操作浏览器。

听起来简单,但这个设计选择背后的洞察非常深刻。而且它真的有效——在两个主流 Web Agent 基准测试上都打到了开源第一。

本文提纲

  1. Webwright 是什么
  2. 核心设计:终端 + 浏览器 + 模型
  3. 为什么「写代码」比「点鼠标」强
  4. 性能表现:两个基准测试 SOTA
  5. 架构剖析:~1.5k 行代码做了什么
  6. 插件生态:Claude Code / Codex / Hermes 都能用
  7. 动手试一把

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

依赖只有四个:httpxpydanticplaywrighttyper。没有 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/                 # 运行产物(轨迹、截图)

两个关键工程细节值得一提:

  1. 自我反思门控(Self-reflection Gate):模型经常在任务没完成时就声称「完成了」。Webwright 加了一道检查——Agent 必须生成一个自我评估配置,在全新环境中运行最终脚本,通过自己的「成功/失败」判断后才能标记完成。否则丢掉完成标记,重新尝试。

  2. 历史压缩(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/Webwright

Codex 兼容 Claude 风格的插件市场,同一个仓库直接用。

Hermes Agent:

ln -sfn /path/to/Webwright/skills/webwright ~/.hermes/skills/webwright

Hermes 是 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/default

Webwright 还支持 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人工智能时代,转载请注明出处。

觉得文章不错?分享给更多人!