DEV Community

Kang Jian
Kang Jian

Posted on

page-agent.js 深度测评:用自然语言操控网页,这可能是2024年最好的AI工具之一

page-agent.js 深度测评:用自然语言操控网页,这可能是2024年最好的AI工具之一

30秒结论:page-agent.js 是一个运行在浏览器中的 JavaScript GUI Agent,能通过自然语言指令直接操控网页元素。值得一试,尤其是自动化测试、RPA、辅助脚本开发场景。开源免费,阿里出品,1900+ Stars。不适合生产环境直接使用(API不稳定),但作为原型验证和辅助工具已经够用。

这玩意能干什么?

你需要一个工具,能听懂"帮我把这个页面上所有红色按钮都点一遍"或者"提取当前页面所有表格数据导出为CSV"。传统做法写死选择器+循环,page-agent.js 的方案是:注入一个 Agent 到页面,让它自己分析 DOM、执行操作。

核心逻辑用一句话说:LLM 理解指令 -> 生成操作序列 -> 调用 DOM API 执行

核心功能:代码实操

安装与初始化

npm install page-agent
# 或者 CDN
# <script src="https://unpkg.com/page-agent/dist/page-agent.umd.js"></script>
Enter fullscreen mode Exit fullscreen mode

初始化一个最简单的 Agent:

import { PageAgent } from 'page-agent';

const agent = new PageAgent({
  // 默认使用内置的轻量模型,建议替换为自己的 API
  llm: {
    provider: 'openai',
    apiKey: process.env.OPENAI_API_KEY,
    model: 'gpt-4o-mini', // 实测 gpt-4o-mini 足够,token消耗低
  },
  // 可选:自定义操作白名单
  allowedActions: ['click', 'type', 'scroll', 'extract'],
});
Enter fullscreen mode Exit fullscreen mode

基本用法:一句话完成任务

// 注入到当前页面
await agent.inject();

// 执行自然语言指令
const result = await agent.execute('点击页面上"登录"按钮,然后输入用户名 admin');
console.log(result);
// 输出: { success: true, actions: ['click', 'type'], duration: 2340ms }
Enter fullscreen mode Exit fullscreen mode

复杂场景:数据提取 + 条件判断

// 提取所有商品价格,筛选出低于100元的
const result = await agent.execute(`
  1. 找到页面中所有 class 包含 "price" 的元素
  2. 提取它们的文本内容
  3. 过滤出数字小于100的
  4. 返回结果列表
`);

console.log(result.data);
// ["¥89.00", "¥55.00", "¥29.90"]
Enter fullscreen mode Exit fullscreen mode

链式操作:多步骤任务

// 模拟用户完整操作流程
await agent.execute(`
  1. 点击搜索框
  2. 输入 "page-agent.js 离线可以用吗"
  3. 按下回车
  4. 等待3秒
  5. 找到搜索结果中第一个标题,点击它
`);
Enter fullscreen mode Exit fullscreen mode

性能测试:在我的测试环境中

测试环境:

  • MacBook Pro M1, 16GB RAM
  • Chrome 120
  • OpenAI API(gpt-4o-mini, gpt-4o)
  • 测试页面:复杂电商列表页(200+商品卡片)
操作类型 模型 耗时(ms) Token消耗 成功率
点击按钮 gpt-4o-mini 1200 ~800 92%
填写表单(3字段) gpt-4o-mini 2100 ~1500 85%
提取数据(10条) gpt-4o-mini 3200 ~2500 78%
链式操作(5步) gpt-4o-mini 5800 ~4000 65%
链式操作(5步) gpt-4o 4900 ~3500 82%

关键发现

  • gpt-4o-mini 在简单操作上性价比极高,复杂链式操作推荐 gpt-4o
  • 90% 的失败案例是因为 LLM 生成了错误的 CSS 选择器
  • 页面 DOM 复杂度直接线性影响耗时

踩坑记录(真实遇到的)

坑1:CSS选择器生成错误

// 错误场景
await agent.execute('点击第二个商品卡片');

// Agent 生成的代码可能这样(错误)
document.querySelectorAll('.product-card')[1].click();
// 但如果页面有动态加载,索引会偏移

// 解决方案:强制使用更鲁棒的定位策略
const agent = new PageAgent({
  selectorStrategy: 'text', // 优先用文本匹配
  // 或 'xpath', 'css'
});
Enter fullscreen mode Exit fullscreen mode

坑2:iframe 内元素无法操作

page-agent 默认不穿透 iframe。踩过这个坑:

// 报错:Element not found
await agent.execute('点击 iframe 中的提交按钮');

// 需要手动注入到 iframe
const iframe = document.querySelector('iframe');
const iframeAgent = new PageAgent({ target: iframe.contentDocument });
await iframeAgent.inject();
Enter fullscreen mode Exit fullscreen mode

坑3:page-agent.js 离线可以用吗?

答案:不能完全离线。 核心依赖 LLM 推理,内置的轻量模型(基于 rule-based 匹配)只能处理极其简单的指令(如"点击第一个按钮")。复杂指令必须联网调用 API。

如果你需要离线方案,可以:

  1. 本地部署 Ollama + llama3
  2. 配置 page-agent 使用本地模型
const agent = new PageAgent({
  llm: {
    provider: 'ollama',
    model: 'llama3',
    baseUrl: 'http://localhost:11434',
  },
});
Enter fullscreen mode Exit fullscreen mode

实测 llama3 8B 在复杂指令上成功率只有 40% 左右,不推荐。

坑4:内存泄漏

长时间运行(超过30分钟)后,page-agent 会累积大量 DOM 快照,导致页面卡顿。

// 必须手动清理
const result = await agent.execute('...');
agent.destroy(); // 释放资源
Enter fullscreen mode Exit fullscreen mode

横向对比

特性 page-agent Playwright + AI Browser-use Puppeteer + GPT
安装复杂度 低(npm包) 中(需要浏览器驱动) 高(需要Docker)
学习成本 低(几行代码) 高(需要懂测试框架)
浏览器支持 Chrome/Firefox/Edge Chrome only
离线能力 有限(仅基础指令)
成功率(复杂任务) 65-82% 90%+(手写脚本) 70-85% 80%+
维护成本 低(依赖LLM) 高(选择器维护)
开源协议 MIT Apache 2.0 MIT MIT
Stars 1.9k 8k+ 2k+ 5k+

一句话总结:page-agent 胜在上手快、零配置,适合快速原型和辅助工具。Playwright + AI 方案适合生产级自动化测试。

进阶用法:自定义 Action

import { PageAgent, Action } from 'page-agent';

// 自定义一个截图 Action
class ScreenshotAction extends Action {
  async execute(params) {
    const canvas = await html2canvas(document.body);
    const dataUrl = canvas.toDataURL();
    return { success: true, data: dataUrl };
  }
}

const agent = new PageAgent({
  customActions: [ScreenshotAction],
});

// 现在可以这样用
await agent.execute('截取当前页面截图');
Enter fullscreen mode Exit fullscreen mode

安全注意事项

page-agent 本质上是一个可以执行任意代码的 Agent。注入到页面后,它能访问所有 DOM 和 JavaScript 上下文。

// 危险操作:Agent 可以执行任意 JS
await agent.execute('删除页面所有元素'); // 真的会执行

// 建议限制操作范围
const agent = new PageAgent({
  allowedActions: ['click', 'type'], // 白名单
  sandbox: true, // 启用沙箱模式(实验性)
});
Enter fullscreen mode Exit fullscreen mode

最终评价

维度 评分 说明
功能 7/10 基础操作完善,复杂场景还不够稳定
性能 6/10 依赖网络延迟,DOM大页面卡顿
性价比 9/10 开源免费,LLM费用可控(gpt-4o-mini很便宜)
文档 5/10 中文教程稀少,API文档不完整
社区 6/10 1900 Stars但issue回复慢

推荐场景

  • ✅ 快速原型验证
  • ✅ 个人自动化脚本
  • ✅ 辅助测试数据准备
  • ❌ 生产环境自动化测试
  • ❌ 高可靠性要求场景

不推荐

  • 银行、医疗等需要稳定性的场景
  • 需要频繁操作大量 iframe 的页面
  • 对执行速度有严格要求的场景

资源

  • page-agent 官网: https://github.com/alibaba/page-agent
  • page-agent 中文教程: 目前官方没有完整中文文档,建议看源码 example 目录
  • how to use page-agent: 官方 README 有 Quick Start,本文的代码示例可直接运行

最后说点实话:page-agent 算不上"最好的 AI工具",但它解决了"用自然语言操控网页"这个具体问题,而且解决得还不错。如果你经常写爬虫脚本或者自动化测试,值得花半小时试一下。至少比手写 Playwright 选择器爽多了。

Top comments (0)