1. 引言:GUI Agent 的范式转移

2025-2026 年,AI Agent 领域最热的方向之一是 GUI Agent——让 AI 像人类一样操作图形界面。从 OpenAI 的 Computer Use 到 Anthropic 的 Claude Computer Use,主流方案都走"截图 → 多模态模型理解 → 模拟鼠标键盘"的路线。

这条路有一个根本问题:太重了。

每次操作都要截图、传给多模态模型、等待推理、再模拟操作。延迟高、资源消耗大、还容易因为截图分辨率或 UI 变化而失败。

阿里巴巴在 2025 年 9 月开源的 Page-Agent 提出了一个截然不同的思路:既然 AI 要操作的是网页,为什么不直接让 AI 住在网页里?

Page-Agent 是一个纯前端 JavaScript GUI Agent 框架。它不需要浏览器扩展、不需要 Python 后端、不需要 Playwright/Selenium、不需要截图——只需要一行 <script> 标签,就能让任何网页具备 AI Agent 能力。截至 2026 年 10 月,该项目在 GitHub 上已突破 29,000 Star,成为最受关注的 GUI Agent 项目之一。


2. 核心技术:DOM 脱水如何改变网页自动化

2.1 什么是"DOM 脱水"?

Page-Agent 的核心创新是其 DOM 脱水(DOM Dehydration) 技术。简单来说,就是把网页的 DOM 结构"脱水"成纯文本表示,去掉所有视觉噪声,只保留 AI 需要理解的语义信息。

传统 GUI Agent 的工作流程:

截图 → 多模态模型识别 UI 元素 → 坐标定位 → 模拟点击

Page-Agent 的工作流程:

DOM 脱水 → 文本化 UI 结构 → LLM 理解语义 → 直接操作 DOM

这意味着 Page-Agent 不需要"看"网页,它直接"读"网页的结构。就像一个盲人程序员通过读代码来操作电脑,而不是通过看屏幕。

2.2 DOM 脱水的具体过程

DOM 脱水包含几个关键步骤:

  1. 元素过滤:移除不可见元素、装饰性元素、纯样式元素
  2. 文本提取:保留有意义的文本内容(按钮文字、标签、输入框 placeholder)
  3. 结构简化:将深层嵌套的 DOM 树压缩为扁平化的语义表示
  4. 交互标注:标记可交互元素(按钮、链接、输入框、下拉菜单)

脱水后的 DOM 表示类似这样:

[button] "登录"
[text input] "搜索..." placeholder="请输入关键词"
[link] "首页" href="/"
[select] 排序方式: [option] 最新 [option] 最热 [option] 评分
[checkbox] "记住我"

这种文本表示体积只有原始 DOM 的 1/10 到 1/50,LLM 可以快速理解并生成操作指令。

2.3 与传统方案的本质区别

维度 Selenium/Playwright Computer Use (截图) Page-Agent (DOM 脱水)
运行位置 外部进程控制浏览器 外部进程 + 截图 页面内 JavaScript
理解方式 硬编码选择器 多模态视觉理解 文本化 DOM 语义
延迟 低(直接操作) 高(截图+推理) 中(DOM 解析+推理)
跨域能力 受限于同源策略 无限制 受限于同源策略
部署复杂度 需要 WebDriver 需要后端服务 一行 script 标签
动态内容 需要等待策略 需要重新截图 实时 DOM 监听

Page-Agent 的优势在于零部署成本和实时响应。它不需要额外的后端服务,不需要截图传输,直接在用户浏览器里完成所有工作。


3. 实测体验:多场景操作效果展示

3.1 电商网站:自动搜索与筛选

在电商网站上,Page-Agent 可以完成复杂的搜索和筛选操作:

JAVASCRIPT
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('搜索"机械键盘",筛选价格 200-500 元,按销量从高到低排序')

Page-Agent 会自动: 1. 找到搜索框并输入"机械键盘" 2. 点击搜索按钮 3. 找到价格筛选控件,设置 200-500 元区间 4. 找到排序下拉菜单,选择"销量排序"

整个过程无需手动编写任何 CSS 选择器或 XPath。

3.2 表单填写:ERP/CRM 系统自动化

企业内部系统(ERP、CRM、OA)通常有复杂的表单,Page-Agent 可以大幅简化操作:

JAVASCRIPT
// 填写客户信息表单
await agent.execute(`
    填写以下客户信息:
    - 公司名称:TechXArtisan
    - 联系人:Kevin
    - 邮箱:kevin@example.com
    - 电话:13800138000
    - 客户等级:VIP
    - 备注:来自官网咨询
    然后点击"保存"按钮
`)

对于动态加载的表单字段(如级联选择器),Page-Agent 会等待元素出现后再操作,避免传统自动化中常见的"元素未找到"错误。

3.3 后台管理系统:批量操作

在后台管理系统中,Page-Agent 可以执行批量操作:

JAVASCRIPT
// 批量审核用户
await agent.execute(`
    在用户管理页面:
    1. 找到所有状态为"待审核"的用户
    2. 勾选这些用户
    3. 点击"批量通过"按钮
    4. 在确认弹窗中点击"确定"
`)

3.4 性能对比

在相同任务下,Page-Agent 与传统方案的性能对比:

指标 Playwright + GPT-4V Page-Agent + Qwen3.5
单次操作延迟 3-5 秒(截图+推理) 1-2 秒(DOM 解析+推理)
带宽消耗 高(传输截图) 低(传输文本)
内存占用 高(浏览器实例) 低(页面内 JS)
并发能力 受限于浏览器实例数 理论上无限制

4. 开发指南:从集成到自定义

4.1 一行代码快速体验

最快的体验方式是直接引入 Demo CDN:

HTML
<!DOCTYPE html>
<html>
<head>
    <title>Page-Agent Demo</title>
</head>
<body>
    <h1>我的网页</h1>
    <button id="btn">点击我</button>

    <!-- 一行代码集成 -->
    <script
        src="https://cdn.jsdelivr.net/npm/page-agent@1.12.4/dist/iife/page-agent.demo.js"
        crossorigin="anonymous"
    ></script>
</body>
</html>

打开页面后,你会看到一个浮动的 Agent 对话框,可以直接输入自然语言指令。

注意:Demo CDN 使用的是免费的测试 LLM API,仅用于技术评估,不建议用于生产环境。

4.2 NPM 安装与自定义 LLM

生产环境建议使用 NPM 安装,并配置自己的 LLM:

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

const agent = new PageAgent({
    // 支持 OpenAI 兼容的 API
    model: 'qwen3.5-plus',
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
    apiKey: 'your-api-key',

    // 语言设置(影响 prompt 语言)
    language: 'zh-CN',

    // 可选:自定义 DOM 脱水规则
    domRules: {
        // 忽略某些元素
        ignoreSelectors: ['.no-agent', '[data-agent-ignore]'],
        // 标记特殊元素
        customAttributes: ['data-action'],
    },
})

// 执行操作
await agent.execute('点击登录按钮')

// 获取页面状态
const state = await agent.getPageState()
console.log(state)

// 监听操作事件
agent.on('action:start', (action) => {
    console.log('开始执行:', action)
})

agent.on('action:complete', (action) => {
    console.log('执行完成:', action)
})

4.3 与 React/Vue 集成

React 集成示例:

JSX
import { useEffect, useRef } from 'react'
import { PageAgent } from 'page-agent'

function MyComponent() {
    const agentRef = useRef(null)

    useEffect(() => {
        agentRef.current = new PageAgent({
            model: 'qwen3.5-plus',
            baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
            apiKey: import.meta.env.VITE_DASHSCOPE_KEY,
            language: 'zh-CN',
        })

        return () => {
            agentRef.current?.destroy()
        }
    }, [])

    const handleCommand = async (command) => {
        await agentRef.current.execute(command)
    }

    return (
        <div>
            <button onClick={() => handleCommand('点击提交按钮')}>
                自动提交
            </button>
            {/* 你的表单内容 */}
        </div>
    )
}

Vue 3 集成示例:

VUE
<template>
    <div>
        <button @click="executeCommand('点击提交按钮')">
            自动提交
        </button>
        <!-- 你的表单内容 -->
    </div>
</template>

<script setup>
import { onMounted, onUnmounted, ref } from 'vue'
import { PageAgent } from 'page-agent'

const agent = ref(null)

onMounted(() => {
    agent.value = new PageAgent({
        model: 'qwen3.5-plus',
        baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
        apiKey: import.meta.env.VITE_DASHSCOPE_KEY,
        language: 'zh-CN',
    })
})

onUnmounted(() => {
    agent.value?.destroy()
})

const executeCommand = async (command) => {
    await agent.value.execute(command)
}
</script>

4.4 自定义 Agent 技能

Page-Agent 支持自定义技能(Skills),让 Agent 具备特定领域的操作能力:

JAVASCRIPT
import { PageAgent, defineSkill } from 'page-agent'

// 定义一个"电商搜索"技能
const ecommerceSearch = defineSkill({
    name: 'ecommerce-search',
    description: '在电商网站搜索商品并筛选',
    parameters: {
        keyword: { type: 'string', description: '搜索关键词' },
        minPrice: { type: 'number', description: '最低价格' },
        maxPrice: { type: 'number', description: '最高价格' },
        sortBy: { type: 'string', enum: ['sales', 'price', 'date'] },
    },
    execute: async (agent, params) => {
        await agent.execute(`搜索"${params.keyword}"`)

        if (params.minPrice || params.maxPrice) {
            const priceRange = `${params.minPrice || 0}-${params.maxPrice || '不限'}`
            await agent.execute(`设置价格区间为 ${priceRange} 元`)
        }

        if (params.sortBy) {
            const sortMap = {
                sales: '按销量排序',
                price: '按价格排序',
                date: '按上架时间排序',
            }
            await agent.execute(sortMap[params.sortBy])
        }
    },
})

const agent = new PageAgent({
    model: 'qwen3.5-plus',
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
    apiKey: 'your-api-key',
    skills: [ecommerceSearch],
})

// 使用技能
await agent.useSkill('ecommerce-search', {
    keyword: '机械键盘',
    minPrice: 200,
    maxPrice: 500,
    sortBy: 'sales',
})

5. 应用前景:谁最需要 Page-Agent

5.1 SaaS 产品 AI 助手

SaaS 产品可以通过 Page-Agent 快速添加 AI 助手功能:

JAVASCRIPT
// 在你的 SaaS 产品中嵌入 AI 助手
import { PageAgent } from 'page-agent'

const assistant = new PageAgent({
    model: 'gpt-4o-mini',
    baseURL: 'https://api.openai.com/v1',
    apiKey: 'your-key',
    language: 'zh-CN',
})

// 用户可以用自然语言操作你的产品
// "帮我创建一个新项目,命名为 Q4 营销计划"
// "把所有未完成的任务分配给张三"

优势: - 无需修改后端 API - 无需编写复杂的指令解析逻辑 - 用户学习成本为零(直接用自然语言)

5.2 企业内部系统自动化

ERP、CRM、OA 等企业内部系统通常操作复杂,Page-Agent 可以:

  • 简化培训:新员工不需要学习复杂的操作流程,直接告诉 AI 要做什么
  • 批量操作:一句话完成原本需要数十次点击的批量任务
  • 跨系统协作:配合 Chrome 扩展,可以在多个系统间自动传递数据

5.3 无障碍访问增强

Page-Agent 可以让视障用户通过语音指令操作网页:

JAVASCRIPT
// 结合 Web Speech API 实现语音控制
const recognition = new webkitSpeechRecognition()
recognition.onresult = async (event) => {
    const command = event.results[0][0].transcript
    await agent.execute(command)
}
recognition.start()

5.4 测试自动化

虽然 Page-Agent 主要面向客户端增强,但也可以用于 E2E 测试:

JAVASCRIPT
// 用自然语言编写测试用例
test('用户登录流程', async () => {
    await agent.execute('在用户名输入框输入 testuser')
    await agent.execute('在密码输入框输入 password123')
    await agent.execute('点击登录按钮')
    await agent.execute('等待页面跳转到仪表盘')

    // 验证结果
    const state = await agent.getPageState()
    expect(state.url).toContain('/dashboard')
})

6. 安全性与局限性

6.1 安全性考虑

跨域问题:Page-Agent 运行在页面内,受同源策略限制,只能操作当前域名的页面。这意味着它无法跨域操作 iframe 中的第三方内容。

敏感操作防护:建议在生产环境中添加操作白名单:

JAVASCRIPT
const agent = new PageAgent({
    // ...
    allowedActions: ['click', 'type', 'select'],
    blockedSelectors: ['[data-sensitive]', '.payment-form'],
    requireConfirmation: ['delete', 'submit', 'payment'],
})

API Key 安全:前端暴露 API Key 存在风险,建议: - 使用代理服务器中转 LLM 请求 - 设置 API Key 的调用频率限制 - 使用短期 Token 而非长期 Key

6.2 当前技术局限

  1. 动态渲染内容:对于 SPA 或动态加载的内容,需要等待 DOM 稳定后才能操作
  2. Canvas/WebGL:无法操作 Canvas 或 WebGL 渲染的内容
  3. Shadow DOM:对 Shadow DOM 的支持有限(正在改进中)
  4. 复杂交互:拖拽、手势等复杂交互的支持还在开发中
  5. LLM 依赖:操作准确性依赖 LLM 的理解能力,复杂指令可能失败

6.3 与同类方案对比

方案 类型 优势 劣势
Page-Agent 前端 JS 零部署、低延迟 受同源策略限制
browser-use Python 后端 功能全面 需要后端服务
Playwright 浏览器自动化 稳定可靠 需要编写选择器
Selenium 浏览器自动化 生态成熟 配置复杂
Computer Use 多模态 AI 通用性强 延迟高、成本高

7. 总结与思考

Page-Agent 代表了 GUI Agent 的一个重要方向:让 AI 住在网页里,而不是从外部操控网页。

这种思路的优势显而易见: - 零部署成本:一行 script 标签即可集成 - 低延迟:无需截图传输,直接操作 DOM - 高并发:不需要浏览器实例,理论上可以无限并发 - 实时响应:DOM 变化立即感知,无需重新截图

但也存在明显的局限: - 同源策略限制:无法跨域操作 - LLM 依赖:操作准确性受 LLM 能力限制 - 安全风险:前端暴露 API Key 需要额外防护

对于 SaaS 产品、企业内部系统、无障碍访问等场景,Page-Agent 提供了一个轻量级、低成本的 AI Agent 解决方案。它不是要取代 Selenium 或 Playwright,而是填补了"页面内 AI 自动化"这个空白。

随着 LLM 能力的持续提升和浏览器 API 的不断完善,Page-Agent 这类"住在网页里的 AI"将会越来越强大。未来的网页可能不再是"给人用的界面",而是"人和 AI 共用的界面"。

项目地址:https://github.com/alibaba/page-agent
在线 Demo:https://alibaba.github.io/page-agent/


FAQ

1. Page-Agent 是什么?与 ChatGPT Computer Use 有什么区别?

Page-Agent 是阿里巴巴开源的纯前端 JavaScript GUI Agent 框架,让 AI 直接在网页内操作 DOM。与 Computer Use 的最大区别是:Computer Use 通过截图+多模态模型理解屏幕内容,然后模拟鼠标键盘操作;Page-Agent 直接读取 DOM 结构,用文本化表示让 LLM 理解页面,然后直接操作 DOM。前者像"远程桌面",后者像"住在网页里的 AI"。

2. Page-Agent 需要后端支持吗?可以完全在浏览器端运行吗?

Page-Agent 本身是纯前端库,可以在浏览器端完全运行。但它需要调用 LLM API 来理解用户指令和生成操作计划,所以需要一个可访问的 LLM 服务(可以是云端 API,也可以是本地部署的模型)。除了 LLM 调用,不需要其他后端服务。

3. 如何将 Page-Agent 集成到我的网站?需要改动现有代码吗?

最简单的集成方式是在 HTML 中添加一行 <script> 标签。如果要用自己的 LLM,可以通过 NPM 安装并初始化 PageAgent 实例。通常不需要改动现有代码,Page-Agent 会自动分析当前页面的 DOM 结构。但如果需要自定义行为(如忽略某些元素、添加自定义技能),需要编写少量配置代码。

4. Page-Agent 支持哪些浏览器?IE 可以用吗?

Page-Agent 支持所有现代浏览器(Chrome、Firefox、Safari、Edge 的最新版本)。由于使用了现代 JavaScript 特性(如 ES Modules、async/await),不支持 IE 浏览器。如果需要支持旧浏览器,可以使用 Babel 转译,但官方不保证兼容性。

5. Page-Agent 的安全性如何?会不会被恶意利用?

Page-Agent 受同源策略限制,只能操作当前域名的页面,无法跨域攻击。但需要注意:前端暴露 API Key 存在风险,建议使用代理服务器中转请求。对于敏感操作(如删除、支付),建议添加确认机制。Page-Agent 本身不会自动执行任何操作,所有指令都需要用户主动输入或通过代码调用。