


























分析日期:2026-07-06
Page Agent 是阿里巴巴开源的一款纯客户端 JavaScript GUI Agent。它的核心理念是:"把 AI Agent 直接嵌入到你的网页中,用自然语言控制界面"。用户无需安装浏览器扩展、Python 环境或无头浏览器,只需在网页中引入一行 <script> 标签,即可让 AI 自动理解网页结构并执行点击、填表、滚动等操作 [1]。
项目受 browser-use 启发,其 DOM 处理组件和 Prompt 设计来自 browser-use,但定位完全不同:Page Agent 专为客户端 Web 增强设计,而非服务端自动化。Playwright/browser-use 是从外部"操控"浏览器(像遥控器),Page Agent 是从内部"增强"网页(像植入的智能芯片)[2]。
| 项目 | 详情 |
|---|---|
| 项目名称 | Page Agent |
| 项目地址 | https://github.com/alibaba/page-agent |
| 项目官网/文档 | https://alibaba.github.io/page-agent/ |
| 在线 Demo | https://alibaba.github.io/page-agent/ |
| npm 包 | page-agent(周下载量 ~25,516) |
| 作者/组织 | 阿里巴巴(Alibaba),主要维护者 Simon (gaomeng1900) |
| Stars | 23,100+(截至 2026 年 7 月) |
| 当前版本 | v1.11.0(2026 年 7 月 3 日发布) |
| 开源协议 | MIT License |
| 主要语言 | TypeScript 80.7%、JavaScript 12.3%、CSS 5.7%、HTML 1.3% |
| 首次发布 | 2025 年 9 月 23 日 |
| 提交数 | 1,085+ |
| npm 版本数 | 74 个 |
项目 README 中包含 demo 演示视频截图,展示了 Page Agent 在网页右下角的交互面板。用户输入自然语言指令后,Agent 会在面板中展示思考过程、执行步骤和操作结果,同时在页面上高亮被操作的元素。曾登上 Hacker News 首页,引发广泛讨论。
Page Agent 不截屏、不使用多模态 LLM。它将 DOM 树序列化为带数字索引的文本结构,每个可交互元素分配一个 [N] 标记,LLM 只需返回 click_element_by_index(2) 这样的工具调用即可。任何支持 function calling 的纯文本 LLM 都能驱动它,Token 成本远低于图像方案 [3]。
DOM 序列化示例:
URL: https://example.com/login
Title: 登录 - My App
[0]<input placeholder="用户名" />
[1]<input type="password" placeholder="密码" />
[2]<button>登录</button>
[3]<a>注册账号</a>
所有代码在浏览器 JavaScript 运行时中执行。通过 CDN 一行 <script> 标签或 npm install 即可集成,无需后端服务、无需 Python 环境、无需无头浏览器 [1]。
Agent 内置经典的 ReAct 循环(Observe → Think → Act),每一步调用 LLM 前强制模型进行反思,回答三个问题 [3]:
| 反思项 | 说明 |
|---|---|
evaluation_previous_goal |
上一步效果评估——成功还是失败? |
memory |
需要记住的关键信息——什么值得保存? |
next_goal |
下一步目标——现在要做什么? |
这保证了长任务中不会"忘记"已完成的步骤,有效避免 Agent 陷入循环。
支持任何兼容 OpenAI API 规范的大模型,包括 Qwen、GPT-5.x、Claude、DeepSeek、Gemini、Ollama 本地模型等 [4]。
| 安全机制 | 说明 |
|---|---|
| 操作白名单/黑名单 | 限制 Agent 可执行的工具类型 |
| 数据脱敏(Data Masking) | 通过 transformContent 钩子过滤敏感内容 |
| 自定义知识库注入 | 通过 systemPrompt 注入业务规则 |
| 生命周期钩子 | beforeStep/afterStep 拦截每一步操作 |
| 对比维度 | Page Agent | browser-use | Playwright |
|---|---|---|---|
| 运行位置 | 浏览器端 JS,同进程 | 服务端 Python | 服务端 Node/Python |
| 是否需要截图 | 否(纯文本 DOM) | 是(依赖截图) | 不适用 |
| 是否需要多模态 LLM | 否(纯文本 LLM) | 是 | 不适用 |
| 集成复杂度 | 一行 <script> 标签 |
需后端服务 | 需后端服务 |
| 依赖 | 仅浏览器 | Python + 浏览器二进制 | Node/Python + 浏览器 |
| 设计定位 | 客户端 Web 增强 | 服务端自动化 | 测试/爬虫 |
| 目标用户 | Web 开发者/产品团队 | 爬虫/Agent 开发者 | QA/测试工程师 |
| Token 成本 | 低(纯文本) | 高(图像 Token) | 不适用 |
开发环境:
| 依赖 | 版本要求 |
|---|---|
| Node.js | ^22.22.1 或 >= 24 |
| npm | ^11.6.3 |
| 浏览器 | 任何现代浏览器(Chrome、Edge、Firefox、Safari) |
生产环境(使用方):
本地 LLM 部署(可选):
# Ollama 配置示例
$env:OLLAMA_CONTEXT_LENGTH=64000
$env:OLLAMA_HOST="0.0.0.0:11434"
$env:OLLAMA_ORIGINS="*"
ollama serve
方式一:CDN 快速体验(一行代码)
<script src="https://cdn.jsdelivr.net/npm/page-agent@1.11.0/dist/iife/page-agent.demo.js" crossorigin="true"></script>
国内镜像:
<script src="https://registry.npmmirror.com/page-agent/1.11.0/files/dist/iife/page-agent.demo.js" crossorigin="true"></script>
方式二:NPM 安装(生产环境)
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('点击登录按钮')
page-agent/
├── packages/
│ ├── page-agent/ # AI 核心代理(npm: page-agent)
│ │ ├── PageAgent # 代理主类(含 UI 面板),协调工具和 LLM
│ │ ├── tools/ # LLM 工具定义,封装各类操作能力
│ │ ├── ui/ # UI 组件和面板,提供人机交互界面
│ │ └── llms/ # LLM 集成层,对接各类大模型
│ ├── core/ # 核心引擎(npm: @page-agent/core)
│ │ └── PageAgentCore # 无 UI 的 Headless Agent
│ ├── page-controller/ # DOM 操作层(npm: @page-agent/page-controller)
│ │ # 负责 DOM 提取、元素交互,独立于 LLM
│ ├── ui/ # 共享 UI 组件
│ ├── llms/ # 共享 LLM 客户端
│ ├── extension/ # Chrome 扩展(跨页面任务)
│ ├── mcp/ # MCP Server(Beta)
│ └── website/ # 文档和演示站点
├── docs/ # 项目文档
├── scripts/ # 构建脚本
├── package.json # 根包配置(workspaces 管理)
├── tsconfig.base.json # TypeScript 基础配置
└── README.md
架构设计原则:
完整的 Agent 类,继承自 PageAgentCore,内置 UI 面板。自动创建 PageController 实例。适用于大多数场景。
class PageAgent extends PageAgentCore {
panel: Panel
pageController: PageController
constructor(config: PageAgentConfig)
}
无 UI 的核心 Agent 类,适用于自定义 UI 或 Headless 场景 [6]。
class PageAgentCore extends EventTarget {
status: 'idle' | 'running' | 'completed' | 'error' | 'stopped'
history: HistoricalEvent[]
task: string
pageController: PageController
tools: Map<string, PageAgentTool>
execute(task: string): Promise<ExecutionResult>
stop(): Promise<void>
dispose(): void
}
关键配置项:
maxSteps:每任务最大步数(默认 40)language:输出语言('en-US' | 'zh-CN')customTools:自定义工具扩展transformContent:页面内容转换(用于数据脱敏)systemPrompt:完全覆盖系统 PromptenableJavaScriptExecution:启用 JS 执行工具(实验性)beforeStep/afterStep:生命周期钩子(实验性)负责 DOM 提取和元素交互,独立于 LLM。将页面状态结构化输出为 LLM 可消费的格式 [7]。
关键方法:
| 方法 | 功能 |
|---|---|
getBrowserState() |
获取结构化浏览器状态(URL、标题、简化 HTML) |
clickElement(index) |
按索引点击元素 |
inputText(index, text) |
在输入框填写文字 |
selectDropdownOption(index, text) |
选择下拉选项 |
scroll(options) |
垂直滚动 |
scrollHorizontally(options) |
水平滚动 |
配置项:
enableMask:操作时显示遮罩层viewportExpansion:视口扩展(-1 表示提取整个页面)excludeElements/includeElements:排除/强制包含的元素extraAttributes:额外提取的 HTML 属性| 工具 | 功能 |
|---|---|
click_element_by_index |
按索引点击元素 |
input_text |
在输入框填写文字 |
select_dropdown_option |
选择下拉框选项 |
scroll |
垂直滚动页面 |
scroll_horizontally |
水平滚动 |
execute_javascript |
执行任意 JS(支持 AbortSignal) |
wait |
等待 1-10 秒 |
ask_user |
向用户提问(人机协作) |
done |
任务完成,返回结果 |
Page Agent 的 ReAct 循环是项目的核心。其工作流程为:
Observe(观察)→ Think(思考)→ Act(执行)→ 循环直到完成
每一步首先调用 PageController.getBrowserState() 获取当前页面的序列化 DOM 快照,然后将这个快照与操作历史一起发送给 LLM,LLM 返回工具调用指令(如 click_element_by_index(2)),Agent 调用 PageController 执行操作 [3]。
反思模型在每个步骤强制执行三个问题:evaluation_previous_goal(上一步效果评估)、memory(需要记住的关键信息)、next_goal(下一步目标),确保长任务中 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',
})
const result = await agent.execute('点击登录按钮,填写用户名为 test@example.com')
console.log(result.success) // true or false
console.log(result.data) // 任务结果描述
console.log(result.history) // 完整执行历史
import { PageAgentCore } from '@page-agent/core'
import { PageController } from '@page-agent/page-controller'
const pageController = new PageController({
enableMask: true,
viewportExpansion: -1, // 提取整个页面
})
const agent = new PageAgentCore({
pageController,
baseURL: 'https://api.openai.com/v1',
apiKey: 'your-api-key',
model: 'gpt-5.2',
})
// 监听事件
agent.addEventListener('statuschange', () => {
console.log('Status:', agent.status)
})
agent.addEventListener('activity', (e) => {
const activity = (e as CustomEvent).detail
console.log('Activity:', activity.type) // thinking | executing | executed | retrying | error
})
await agent.execute('Fill in the form with test data')
Headless 模式通过事件总线提供完整的执行可观测性,支持 statuschange、activity 等事件,便于集成到自定义 UI 中 [6]。
import { PageAgentCore } from '@page-agent/core'
import type { PageController } from '@page-agent/page-controller'
class PuppeteerPageController implements PageController {
async getBrowserState() {
// Puppeteer 实现:提取页面 DOM 并序列化
}
async clickElement(index: number) {
// 通过 Puppeteer 执行点击
}
async inputText(index: number, text: string) {
// 通过 Puppeteer 填写文本
}
async scroll(options: { down: boolean; numPages: number }) {
// 通过 Puppeteer 执行滚动
}
}
const agent = new PageAgentCore({
pageController: new PuppeteerPageController(),
baseURL: 'https://api.openai.com/v1',
apiKey: 'your-api-key',
model: 'gpt-5.2',
})
PageController 接口设计允许在非浏览器环境(如 Puppeteer、Playwright)中复用 Agent 核心逻辑,只需实现接口即可。这体现了架构分层设计的优势 [7]。
| 场景 | 描述 | 典型例子 |
|---|---|---|
| SaaS AI Copilot | 为产品嵌入 AI 副驾驶,无需重写后端 | 用户说"把上周销售数据导出成 Excel",Agent 自动定位导出按钮、选时间范围、点击确认 |
| 智能表单填写 | 将 20 次点击浓缩为一句自然语言 | ERP/CRM 中一句话完成"按上次模板填客户信息" |
| 老旧系统智能化 | 一行代码让 Legacy 系统变身 AI 助手 | 企业 OA 系统加 AI 操控能力,不动后端 |
| 无障碍增强 | 自然语言操作任何网页 | 视障用户配合读屏软件和语音指令使用复杂网页 |
| 客服系统升级 | 客服机器人从"说教"变"实干" | 不再告诉用户"请点击某某按钮",而是直接帮用户完成操作 |
| 交互式教学 | AI 边操作边讲解 | 演示"如何提交报销申请",新员工一看就会 |
| 跨页面 Agent | 跨系统自动操作(需 Chrome 扩展) | 在 A 系统查订单 → 到 B 系统建工单 |
| MCP 控制 | 让外部 Agent 客户端控制浏览器 | Claude Desktop 通过 MCP 远程操控网页 |
<script> 标签或 npm install 即可使用,无需后端改造,是业界集成门槛最低的 GUI Agent 方案。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。