页面内运行
Page Agent 不是从外部进程启动浏览器,而是作为 JavaScript 库嵌入网页。它天然继承用户当前页面、Cookie、登录状态和前端校验链路。
Alibaba Page Agent · 技术博客
AI HOT / MarkTechPost 把 Page Agent 的亮点概括为“页面内 JavaScript + 文本 DOM 操作”。我进一步深挖了 alibaba/page-agent 仓库源码、文档、发布记录和 npm 包信息:它的核心差异不是更快的浏览器自动化,而是把“用户正在使用的产品界面”变成一个可被自然语言驱动的客户端能力层。
Page Agent 不是从外部进程启动浏览器,而是作为 JavaScript 库嵌入网页。它天然继承用户当前页面、Cookie、登录状态和前端校验链路。
它把实时 DOM 抽取成带索引的简化文本表示,让文本模型选择“点击第 3 个按钮”或“向第 5 个输入框输入内容”,避免用视觉模型猜坐标。
模型层是 OpenAI-compatible Chat Completions + tool call。可以接 Qwen、OpenAI、Claude 代理、DeepSeek 或本地 Ollama / LM Studio。
原文的判断基本准确:Page Agent 最适合你能控制代码的应用,例如 SaaS、ERP、CRM、管理后台、客服后台、内部工具。它不适合当作跨站爬虫或外部 RPA 平台的直接替代品,因为核心库的能力边界是当前页面,跨页能力需要额外的 Chrome 扩展或 MCP 服务器配合。
仓库是 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 和文档站。核心链路可以按下面理解:
agent.execute()。
getBrowserState(),刷新 DOM 树、页面标题、URL、滚动信息和可交互元素列表。
getFlatTree() 和 flatTreeToString() 产出带编号的简化 HTML / FlatDomTree。
PageAgentCore 拼装 system prompt、history、browser_state,并强制模型输出宏工具调用。
clickElement、inputText、selectOption、scroll 等动作。
| 包 / 模块 | 职责 | 对业务开发者的意义 |
|---|---|---|
page-agent |
主入口,组合 PageAgentCore、PageController 和 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 通信。 | 补齐核心库单页限制,支持多标签页和浏览器级任务。 |
FlatDomTree 是一个 rootId + map 的扁平节点结构。交互节点带 highlightIndex 和真实 HTMLElement ref,模型只看索引文本,执行时再回到真实 DOM 引用。flatTreeToString() 默认保留 title、type、role、placeholder、aria-label、id、for、contenteditable 等属性,剔除冗余标记。done、wait、ask_user、click_element_by_index、input_text、select_dropdown_option、scroll、scroll_horizontally,以及可选的 execute_javascript。evaluation_previous_goal、memory、next_goal,再选择一个 action。这降低了“连续乱点”的概率,也方便 UI 展示和调试。customTools 可以新增、覆盖或删除工具;instructions 可以注入系统级和页面级知识;transformPageContent 可以在发给模型前做脱敏。MultiPageAgent 明确禁用 ScriptExecutionTool,因为 AbortSignal 和安全边界跨上下文更复杂。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 | 标准化、强语义、工具级可靠调用 | 不愿逐项设计工具、等待标准生态成熟前的快速落地 |
视觉 agent 的优势是“什么页面都能看”,代价是成本、延迟和坐标歧义。Page Agent 反过来选择“只在 DOM 语义足够的页面里做得更便宜、更可解释”。这对 B 端系统特别重要:管理后台通常有按钮、表单、表格、菜单、aria-label、placeholder、id、name,这些本来就是 UI 的语义骨架。
页面内执行意味着它直接处在用户会话里:前端权限、表单校验、路由状态、当前筛选条件、已登录身份都自然存在。对于“帮用户在当前产品里完成任务”的场景,这比外部 agent 新开一个浏览器上下文更贴近用户体验。
测试框架追求确定性、断言、可复现、CI 规模化。Page Agent 引入 LLM 决策,本质上是面向用户体验的概率式操作员。你可以用它探索流程、做客服代操作、做辅助填表,但不要把它当作 Playwright test suite 的替代品。
适合复杂菜单、多步骤表单、用户经常问“这个功能在哪”的产品。客服机器人不只是回答“请点击左侧菜单”,而是可以直接在页面里完成第一步。
典型指令:“帮我创建一个下周三的客户回访任务,负责人设为 Lily。”
ERP、CRM、报销、审批、工单系统里,用户输入自然语言后由 agent 找字段、填值、选择下拉项、滚动到后续区域。
注意:最终提交、付款、删除等动作仍建议二次确认或服务端校验。
老系统没有 API,重构成本高,但 DOM 仍有可访问的按钮和输入框。Page Agent 可以作为“命令栏 + AI 操作层”叠加进去。
前提:能插入脚本,且页面不是高度 Canvas / 图像化。
结合语音识别、屏幕阅读器和页面语义,用户可以说出目标,由 agent 操作当前页面。这对视障用户、低数字熟练度用户和移动办公用户有价值。
关键:语义化 HTML 和可访问性标签越好,效果越稳定。
让 agent 在真实 UI 上边操作边展示流程,比录屏教程更贴近当前版本。用户也可以打断、追问或换目标。
典型指令:“演示一下如何导出本月销售报表。”
把 pageAgent.execute() 封装成客服机器人、帮助中心机器人或内部 agent 的工具,让上层 agent 决定何时调用页面操作。
适合:已有问答机器人,但缺少对当前页面执行动作的能力。
适合本地 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(...)。
适合正式产品。不要把真实 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('点击登录按钮')
让前端请求自己的 /api/llm-proxy,后端再转发给模型供应商。这样可以统一鉴权、限流、审计和脱敏。
const agent = new PageAgent({
baseURL: '/api/llm-proxy',
model: 'gpt-5.1',
customFetch: (url, init) =>
fetch(url, { ...init, credentials: 'include' }),
})
适合内网、离线或敏感业务验证。要求模型支持 tool call,并给足上下文窗口;官方文档建议普通页面可能需要 15k token 左右。
const agent = new PageAgent({
baseURL: 'http://localhost:11434/v1',
model: 'qwen3:14b'
})
浏览器直连本地服务时要开启 CORS。
把高价值动作做成 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())
},
}),
},
})
如果需要跨标签页、从 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"
}
}
}
}
真实 API Key 不应进入前端 bundle。用后端代理,并在代理侧做用户鉴权、额度控制、日志审计和供应商切换。
用 transformPageContent 在 DOM 文本发给 LLM 前遮盖手机号、邮箱、身份证号、银行卡号、内部备注等敏感信息。
提示词约束不是强安全边界。支付、删除、提交合同、发送邮件、修改权限等动作应有服务端二次验证或用户确认。
通过交互黑名单、白名单、data-page-agent-not-interactive 等方式减少 agent 可触达范围。
它不识别图片、Canvas、WebGL、纯 SVG 图形。复杂图表和画布类应用需要补充真实 DOM 标签、说明或自定义工具。
核心 PageAgent.js 面向当前页面 / SPA。多页面任务要用扩展,跨站任务要重新评估是否该用 browser-use、Playwright MCP 或其他外部 harness。
| 你的目标 | 优先选择 | 原因 |
|---|---|---|
| 给自家 SaaS 加一个能代用户操作的助手 | Page Agent | 嵌入成本低,能利用现有 DOM、登录态和 UI 校验。 |
| 做稳定 CI E2E 测试 | Playwright | 断言、隔离上下文、跨浏览器、可复现更重要。 |
| 做跨站自主浏览 / 在线研究 / RPA | browser-use 或浏览器 MCP | 外部 agent harness 更擅长多站点、会话管理和浏览器级控制。 |
| 让网站显式暴露标准化 agent 工具 | WebMCP / 自定义 tools | 结构化工具比 DOM 点击更可控,但需要开发者定义动作 schema。 |
| 老后台快速加自然语言入口 | Page Agent + 脱敏 + 黑白名单 | 不用大改前后端,先做可控增强,再逐步沉淀业务工具。 |
83fee37,最后提交信息 fix: ci。
1.10.0,修改时间为 2026-06-15。