Appearance
page-agent
是什么
page-agent 是阿里巴巴开源的浏览器增强工具,通过注入 PageController 获得比普通 browser 工具更精准的 DOM 操作能力——可以精确点击、输入、滚动、抓取任意网页,支持 React/Vue 等框架。
- GitHub: alibaba/page-agent(v1.5.6)
- 协议: MIT
- 定位: 设计 → 代码 → 浏览器操作 全流程的一环
解决啥
普通 browser 工具在复杂页面前很无力:
- 只能操作
<button>、<a>等语义标签,遇到<div onclick>就失效 - React/Vue 框架的输入框直接赋值
.value = xxx无效,事件不触发 - 点击事件只触发
.click(),没有完整事件链,页面没反应 - 无语境检测,看不见
cursor:pointer的隐藏可点击元素
page-agent 通过 PageController 注入,重建完整的事件系统,绕过所有这些问题。
怎么跑
Step 1:注入 PageController
bash
node ~/.openclaw/workspace/skills/page-agent/scripts/inject-cdp.mjs <TARGET_ID>
TARGET_ID 来自 browser(action="open", ...) 的返回值。
Step 2:获取页面结构
javascript
const state = await window.__PA__.getState();
输出是带索引的简化 HTML:
[0]<a aria-label=首页 />
[1]<div >PageAgent />
[2]<button role=button>快速开始 />
[3]<input placeholder=搜索... type=text />
Step 3:按索引操作
javascript
await window.__PA__.click(2); // 点击第3个元素
await window.__PA__.input(3, "hello"); // 向第4个输入框输入
await window.__PA__.scroll(true, 1); // 向下滚动一页
Step 4:重新读取状态
每次操作后调用 getState(),观察页面变化。新出现的元素用 *[N] 标记。
好在哪
| 能力 | 说明 |
|---|---|
| cursor:pointer 启发式 | 即使没有语义标签,也能识别可点击 div |
| 完整事件链 | mouseenter→mouseover→mousedown→focus→mouseup→click |
| React/Vue 兼容 | 用原生 value setter 绕过框架事件拦截 |
| contenteditable 支持 | 完整 dispatch beforeinput/input 事件 |
| 元素索引操作 | [N]<tag> 格式,精确指挥 AI 操作 |
| 增量变化检测 | *[N] 标记新出现的元素 |
怎么用
完整工作流:设计 → 代码 → 浏览器测试
1. 设计 → 用前端设计工具生成页面
2. 启动 → npx serve 或框架 dev server
3. 打开 → browser(action="open", targetUrl="http://localhost:3000")
4. 注入 → inject-cdp.mjs 注入 PageController
5. 检查 → getState() 读取 DOM 结构
6. 操作 → click / input / scroll 测试页面行为
7. 迭代 → 修改代码 → 重新注入 → 重复
注意事项:
- 页面全刷新后需要重新注入
- 能用
content文字获取的信息,优先于截图(更省 token) - 长页面用
scroll + getState组合分段查看