Alibaba Page Agent · 技术博客

把 GUI Agent 放进网页里:Page Agent 为什么不是另一个 Playwright

AI HOT / MarkTechPost 把 Page Agent 的亮点概括为“页面内 JavaScript + 文本 DOM 操作”。我进一步深挖了 alibaba/page-agent 仓库源码、文档、发布记录和 npm 包信息:它的核心差异不是更快的浏览器自动化,而是把“用户正在使用的产品界面”变成一个可被自然语言驱动的客户端能力层。

仓库:alibaba/page-agent 当前包版本:1.10.0 源码快照:83fee37 MIT License 整理日期:2026-07-03
Page Agent 项目横幅
Page Agent 官方 README 横幅。它的定位是 “The GUI Agent Living in Your Webpage”。

1. 文章要点整理:它解决的不是“无人浏览器”,而是“产品内副驾驶”

页面内运行

Page Agent 不是从外部进程启动浏览器,而是作为 JavaScript 库嵌入网页。它天然继承用户当前页面、Cookie、登录状态和前端校验链路。

读 DOM,不读截图

它把实时 DOM 抽取成带索引的简化文本表示,让文本模型选择“点击第 3 个按钮”或“向第 5 个输入框输入内容”,避免用视觉模型猜坐标。

BYO LLM

模型层是 OpenAI-compatible Chat Completions + tool call。可以接 Qwen、OpenAI、Claude 代理、DeepSeek 或本地 Ollama / LM Studio。

原文的判断基本准确:Page Agent 最适合你能控制代码的应用,例如 SaaS、ERP、CRM、管理后台、客服后台、内部工具。它不适合当作跨站爬虫或外部 RPA 平台的直接替代品,因为核心库的能力边界是当前页面,跨页能力需要额外的 Chrome 扩展或 MCP 服务器配合。

一句话总结:Playwright、Selenium、Puppeteer 主要是“外部程序控制浏览器”;browser-use 是“外部 agent 使用浏览器”;WebMCP 是“网站显式暴露工具”;Page Agent 的独特点是“网页自己内置一个懂 DOM 的自然语言操作员”。

2. 源码级架构拆解:一个 ReAct 循环,加一个 DOM 控制器

仓库是 TypeScript monorepo,根版本为 1.10.0,主要 workspace 包包括 page-agent@page-agent/core@page-agent/llms@page-agent/page-controller@page-agent/ui@page-agent/mcp@page-agent/ext 和文档站。核心链路可以按下面理解:

2.1 包边界

包 / 模块 职责 对业务开发者的意义
page-agent 主入口,组合 PageAgentCorePageController 和 UI Panel。 最常用的 npm 包。几行代码即可把自然语言面板放进应用。
@page-agent/core 无 UI 的 agent 循环:状态、历史、工具、hooks、停止/取消、最大步数。 适合接入自己的客服机器人、产品助手或自定义 UI。
@page-agent/page-controller DOM 抽取、元素索引、点击、输入、选择、滚动、遮罩反馈。 这是“读页面和动页面”的实际执行层,和 LLM 解耦。
@page-agent/llms OpenAI-compatible 客户端、tool schema 转换、重试、响应校验。 可以替换模型供应商,但模型必须能稳定 tool call。
@page-agent/mcp 让 Claude Desktop、Copilot 等 MCP 客户端通过扩展控制浏览器。 适合把 Page Agent 扩成外部 agent 可调用的浏览器能力。
packages/extension Chrome 扩展、MultiPageAgent、tab 控制、外部授权 token、Hub 通信。 补齐核心库单页限制,支持多标签页和浏览器级任务。

2.2 关键实现细节

3. 与其他方案不一样的地方

Page Agent 的差异不应该只写成“无头浏览器 vs 无需无头浏览器”。更准确的比较维度是:谁拥有页面、在哪里执行、读取什么表示、谁承担安全边界。

方案 执行位置 页面理解方式 强项 不适合
Page Agent 网页内部的客户端 JS 实时 DOM → FlatDomTree → 索引化文本 产品内 Copilot、表单自动填充、客服代操作、可访问性增强 不可改代码的第三方网站、纯视觉页面、复杂跨站 RPA
Playwright 外部测试/脚本进程 Locator、DOM、浏览器协议、断言 E2E 测试、CI、跨浏览器自动化、确定性脚本 直接给终端用户做产品内自然语言助手
Selenium / WebDriver 外部进程,可本地或远程驱动浏览器 W3C WebDriver 协议和语言绑定 成熟测试体系、跨语言、远程浏览器基础设施 低集成成本的前端内嵌 AI 操作层
Puppeteer Node.js 外部进程 CDP / WebDriver BiDi,高级浏览器 API Chrome/Firefox 自动化、截图、PDF、性能分析、爬取 让普通用户在你的网站里用自然语言操作
browser-use 外部 agent + 浏览器 harness 浏览器状态、DOM/可选视觉、agent loop 自主跨站任务、研究、在线操作、RPA 原型 只想在自家产品内加一个轻量用户助手
WebMCP 浏览器/页面暴露结构化工具 开发者声明的 JS 函数或表单工具 schema 标准化、强语义、工具级可靠调用 不愿逐项设计工具、等待标准生态成熟前的快速落地
核心判断:Page Agent 是“渐进式产品增强”路线。它不要求你把所有业务能力重新封装成 API 或 MCP 工具,也不要求用户把任务交给外部浏览器机器人。你先让现有 UI 被 agent 读懂,再逐步把关键业务操作上升为自定义工具。

3.1 为什么文本 DOM 有价值

视觉 agent 的优势是“什么页面都能看”,代价是成本、延迟和坐标歧义。Page Agent 反过来选择“只在 DOM 语义足够的页面里做得更便宜、更可解释”。这对 B 端系统特别重要:管理后台通常有按钮、表单、表格、菜单、aria-label、placeholder、id、name,这些本来就是 UI 的语义骨架。

3.2 为什么页面内执行有价值

页面内执行意味着它直接处在用户会话里:前端权限、表单校验、路由状态、当前筛选条件、已登录身份都自然存在。对于“帮用户在当前产品里完成任务”的场景,这比外部 agent 新开一个浏览器上下文更贴近用户体验。

3.3 为什么它不能替代测试框架

测试框架追求确定性、断言、可复现、CI 规模化。Page Agent 引入 LLM 决策,本质上是面向用户体验的概率式操作员。你可以用它探索流程、做客服代操作、做辅助填表,但不要把它当作 Playwright test suite 的替代品。

4. 它在哪些场景能发挥特长

SaaS / B 端产品 Copilot

适合复杂菜单、多步骤表单、用户经常问“这个功能在哪”的产品。客服机器人不只是回答“请点击左侧菜单”,而是可以直接在页面里完成第一步。

典型指令:“帮我创建一个下周三的客户回访任务,负责人设为 Lily。”

智能表单填写

ERP、CRM、报销、审批、工单系统里,用户输入自然语言后由 agent 找字段、填值、选择下拉项、滚动到后续区域。

注意:最终提交、付款、删除等动作仍建议二次确认或服务端校验。

遗留系统现代化

老系统没有 API,重构成本高,但 DOM 仍有可访问的按钮和输入框。Page Agent 可以作为“命令栏 + AI 操作层”叠加进去。

前提:能插入脚本,且页面不是高度 Canvas / 图像化。

无障碍与语音控制

结合语音识别、屏幕阅读器和页面语义,用户可以说出目标,由 agent 操作当前页面。这对视障用户、低数字熟练度用户和移动办公用户有价值。

关键:语义化 HTML 和可访问性标签越好,效果越稳定。

产品教学与演示

让 agent 在真实 UI 上边操作边展示流程,比录屏教程更贴近当前版本。用户也可以打断、追问或换目标。

典型指令:“演示一下如何导出本月销售报表。”

第三方 Agent 的“手”

pageAgent.execute() 封装成客服机器人、帮助中心机器人或内部 agent 的工具,让上层 agent 决定何时调用页面操作。

适合:已有问答机器人,但缺少对当前页面执行动作的能力。

5. 使用方式:从 30 秒评估到生产集成

方式 A:CDN 快速评估

适合本地 demo 或技术验证。官方 demo CDN 会使用免费测试 LLM,只能用于评估,不能承载真实用户和敏感数据。

<script
  src="https://cdn.jsdelivr.net/npm/page-agent@1.10.0/dist/iife/page-agent.demo.js"
  crossorigin="true"></script>

如果要加载脚本但不自动初始化,可追加 ?autoInit=false,再手动 new window.PageAgent(...)

方式 B:npm 集成到前端项目

适合正式产品。不要把真实 LLM API Key 直接放进前端包,生产环境建议使用后端代理。

npm install page-agent
import { PageAgent } from 'page-agent'

const agent = new PageAgent({
  model: 'qwen3.5-plus',
  baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
  apiKey: 'YOUR_API_KEY',
  language: 'zh-CN',
})

await agent.execute('点击登录按钮')

方式 C:生产 LLM 代理

让前端请求自己的 /api/llm-proxy,后端再转发给模型供应商。这样可以统一鉴权、限流、审计和脱敏。

const agent = new PageAgent({
  baseURL: '/api/llm-proxy',
  model: 'gpt-5.1',
  customFetch: (url, init) =>
    fetch(url, { ...init, credentials: 'include' }),
})

方式 D:本地模型

适合内网、离线或敏感业务验证。要求模型支持 tool call,并给足上下文窗口;官方文档建议普通页面可能需要 15k token 左右。

const agent = new PageAgent({
  baseURL: 'http://localhost:11434/v1',
  model: 'qwen3:14b'
})

浏览器直连本地服务时要开启 CORS。

方式 E:自定义工具

把高价值动作做成 typed tool,比让 agent 一路点击更可靠。比如添加购物车、查询知识库、创建工单。

import { z } from 'zod/v4'
import { PageAgent, tool } from 'page-agent'

const agent = new PageAgent({
  customTools: {
    create_ticket: tool({
      description: 'Create a support ticket.',
      inputSchema: z.object({
        title: z.string(),
        priority: z.enum(['low', 'medium', 'high']),
      }),
      execute: async (input, { signal }) => {
        const res = await fetch('/api/tickets', {
          method: 'POST',
          body: JSON.stringify(input),
          signal,
        })
        return JSON.stringify(await res.json())
      },
    }),
  },
})

方式 F:扩展 / MCP 跨页能力

如果需要跨标签页、从 Claude Desktop / Copilot 调浏览器,可安装 Page Agent Chrome 扩展并配置 @page-agent/mcp

{
  "mcpServers": {
    "page-agent": {
      "command": "npx",
      "args": ["-y", "@page-agent/mcp"],
      "env": {
        "LLM_BASE_URL": "https://api.openai.com/v1",
        "LLM_API_KEY": "sk-xxx",
        "LLM_MODEL_NAME": "gpt-5.2"
      }
    }
  }
}

6. 生产落地的安全边界

不要泄露 Key

真实 API Key 不应进入前端 bundle。用后端代理,并在代理侧做用户鉴权、额度控制、日志审计和供应商切换。

先脱敏再发模型

transformPageContent 在 DOM 文本发给 LLM 前遮盖手机号、邮箱、身份证号、银行卡号、内部备注等敏感信息。

高危操作服务端兜底

提示词约束不是强安全边界。支付、删除、提交合同、发送邮件、修改权限等动作应有服务端二次验证或用户确认。

用黑白名单控制元素

通过交互黑名单、白名单、data-page-agent-not-interactive 等方式减少 agent 可触达范围。

把可视化页面补上语义

它不识别图片、Canvas、WebGL、纯 SVG 图形。复杂图表和画布类应用需要补充真实 DOM 标签、说明或自定义工具。

承认单页边界

核心 PageAgent.js 面向当前页面 / SPA。多页面任务要用扩展,跨站任务要重新评估是否该用 browser-use、Playwright MCP 或其他外部 harness。

我的落地建议:先把 Page Agent 用在低风险“辅助操作”和“流程教学”上;等你观察到高频成功路径,再把这些路径沉淀成自定义工具或后端 API。不要一开始就让它自由执行所有按钮。

7. 选型结论

你的目标 优先选择 原因
给自家 SaaS 加一个能代用户操作的助手 Page Agent 嵌入成本低,能利用现有 DOM、登录态和 UI 校验。
做稳定 CI E2E 测试 Playwright 断言、隔离上下文、跨浏览器、可复现更重要。
做跨站自主浏览 / 在线研究 / RPA browser-use 或浏览器 MCP 外部 agent harness 更擅长多站点、会话管理和浏览器级控制。
让网站显式暴露标准化 agent 工具 WebMCP / 自定义 tools 结构化工具比 DOM 点击更可控,但需要开发者定义动作 schema。
老后台快速加自然语言入口 Page Agent + 脱敏 + 黑白名单 不用大改前后端,先做可控增强,再逐步沉淀业务工具。

资料来源与核验记录