Q
QQ浏览器自动化助手
作者:鹿Sir开发工具v1
面向 AI 的浏览器自动化 CLI 工具。当需要:打开、导航或操作网页(填表、点击、截图、下载、查看页面);提取网页结构化数据;分析已打开的标签页;录制、保存或复用浏览器任务(保存为脚本、录一下、下次还要用);运行已有的 playbook 时使用。web_fetch 遇到验证码、登录墙或空 SPA 页面时也可作为兜底。不适用于无浏览器任务的 HTML/CSS/JS 问答或书签/历史记录查询。
下载量
324
点赞
79
价格
免费
技能文档
---
name: qqbrowser-skill
title: QQ浏览器自动化助手
description: "面向 AI 的浏览器自动化 CLI 工具。当需要:打开、导航或操作网页(填表、点击、截图、下载、查看页面);提取网页结构化数据;分析已打开的标签页;录制、保存或复用浏览器任务(保存为脚本、录一下、下次还要用);运行已有的 playbook 时使用。web_fetch 遇到验证码、登录墙或空 SPA 页面时也可作为兜底。不适用于无浏览器任务的 HTML/CSS/JS 问答或书签/历史记录查询。"
category: 开发工具
---
# QQ浏览器自动化助手
面向 AI 的浏览器自动化 CLI。每个任务包裹在独立的 Chrome 标签组中,支持实时自动化与可复用的 playbook 回放两种模式。
## 平台支持
Linux x86_64、Windows、macOS。其他 Linux 架构(ARM 等)不支持。
## 安装
```bash
# Linux / macOS
pipx install qqbrowser-skill
qqbrowser-skill install # 下载并安装 QQ 浏览器
# Windows
pip install qqbrowser-skill
qqbrowser-skill install
```
## 快速上手
```bash
qqbrowser-skill browser_start_session --sessionId task-demo-001 --initialUrl https://example.com
qqbrowser-skill playbook_list # 先检查已有 playbook
qqbrowser-skill browser_snapshot # 获取带编码索引的元素
qqbrowser-skill browser_click_element --index "<来自snapshot的index>"
qqbrowser-skill browser_end_session --sessionId task-demo-001
```
---
## 命令
### 会话管理
```bash
browser_start_session --sessionId <id> [--title "<标题>"] [--color <颜色>] [--initialUrl <url>]
browser_end_session --sessionId <id>
browser_attach_session --tabIds "[<tabId1>,<tabId2>]" [--primaryTabId <id>] [--sessionId <id>] [--focus]
```
> `--initialUrl`:启动会话时直接导航到指定 URL,省去单独调用 `browser_go_to_url` 的步骤。
>
> 隔离模式固定为 `enforce`——`browser_start_session` 不接受 `--isolation` 参数。
>
> `browser_attach_session`:接管**已打开**的标签页作为 AI 会话的交互对象(点击 / 输入 / 滚动 / 按键)。**前置步骤:`tabId` 无法凭空猜测,必须先调用 `browser_tab_list` 获取,再作为 `--tabIds` 传入。** 仅需读取页面文本时改用 `browser_get_tab_content`(无需会话、无需激活、无需切换)。不传 `sessionId` 时由服务端生成并回传。
### 页面导航
```bash
browser_go_to_url --url <url>
browser_go_back
browser_wait --seconds <n> # 默认 3 秒
```
### 快照与截图
```bash
browser_snapshot # 元素索引(用于交互)
browser_snapshot --markdown # Markdown(用于阅读)
browser_screenshot [--full] [--annotate]
```
**`browser_snapshot --markdown`** 返回干净的页面 Markdown(去除广告/导航/脚本,不含元素索引)。当 AI 需要在一次性任务中阅读/总结页面内容(分支 C)时使用。不要在 `task_begin`/`task_end`(分支 B)内使用,需要结构化数据时改用 `browser_eval_content_js`。
### 点击与输入
```bash
browser_click_element --index <id>
browser_dblclick_element --index <id>
browser_focus_element --index <id>
browser_input_text --index <id> --text "<内容>"
```
### 滚动
```bash
browser_scroll_down [--amount <px>]
browser_scroll_up [--amount <px>]
browser_scroll_to_text --text "<文本>"
browser_scroll_to_top
browser_scroll_to_bottom
browser_scroll_by --direction <方向> --pixels <n> [--index <id>]
browser_scroll_into_view --index <id>
```
### 键盘
```bash
browser_keypress --key <键>
browser_keyboard_op --action type --text "<内容>"
browser_keyboard_op --action inserttext --text "<内容>"
browser_keydown --key <键>
browser_keyup --key <键>
```
### 下拉框与复选框
```bash
browser_get_dropdown_options --index <id>
browser_select_dropdown_option --index <id> --text "<选项>"
browser_check_op --index <id> --value / --no-value
```
### 语义定位(查找并操作)
```bash
browser_find_and_act --by <role|text|label|placeholder|testid|css> --value "<值>" --action <click|fill|type> [--actionValue "<值>"] [--name "<名称>"] [--nth <n>]
```
> `--nth`:从 1 开始的序号,用于列表遍历(`--nth 1` 为第一个匹配)。配合 `by: "css"` + `--nth` 实现循环。
### 获取信息与状态
```bash
browser_get_info --type <text|url|title|html|value|attr|count|box|styles|list_selector> [--index <id>] [--attribute <属性名>]
browser_check_state --state <visible|enabled|checked> --index <id>
```
> **`list_selector`**:自动探测用于列表遍历的 CSS 选择器。传入任一列表项的 index,返回 `{"selector": "...", "count": N, "samples": [...]}`。
### JavaScript 执行
```bash
browser_eval_content_js --script "<js代码>"
browser_eval_content_js --script "<base64>" --base64
```
### 下载
```bash
browser_download_file --index <id>
```
下载成功后,把保存的文件路径返回给用户或下一步处理。如用户要求分析下载的文件,把该路径视为浏览器子任务的输出,在浏览器工作流之外继续处理。
### 标签页管理
```bash
browser_tab_open --url <url>
browser_tab_list
browser_tab_switch --tabId <n>
browser_tab_reload --tabId <n>
browser_tab_close --tabId <n>
browser_get_tab_content --tabId <n>
```
> **`browser_get_tab_content`** 提取 `--tabId` 指定标签页的可读文本内容(tabId 来自 `browser_tab_list`)。目标标签页**无需**处于激活状态,适合在不切换标签的情况下读取某个页面的内容。
>
> **`browser_tab_list`** 返回所有打开标签页的 JSON 数组,每个元素含 `tabId`(整数,标签页标识)、`tabTitle`、`tabUrl`、`active`(是否当前激活)、`groupId`(所属标签组,`-1` 表示不在任何组)、`sessionId`(所属 AI 会话,空字符串表示不属于任何会话)、`inSession`(是否属于 AI 会话组)。`tabId` 用于 `browser_tab_switch` / `browser_tab_reload` / `browser_tab_close` / `browser_attach_session` 及标签组命令;`groupId` 用于 `browser_tabgroup_get` 查询组详情。
### 标签组管理
创建、查看、更新、排序和关闭标签组。
```bash
browser_tabgroup_create --tabIds "[<tabId1>,<tabId2>]" [--title "<标题>"] [--color <颜色>]
browser_tabgroup_list
browser_tabgroup_get --groupId <n>
browser_tabgroup_update --groupId <n> [--title "<标题>"] [--color <颜色>] [--collapsed | --no-collapsed]
browser_tabgroup_add_tabs --groupId <n> --tabIds "[<tabId1>,<tabId2>]"
browser_tabgroup_remove_tabs --tabIds "[<tabId1>,<tabId2>]"
browser_tabgroup_move --groupId <n> --index <n>
browser_tabgroup_close --groupId <n>
```
**只读 vs 变更**:`browser_tabgroup_list`、`browser_tabgroup_get` 为只读查询;其余为变更操作,会改变标签组的成员/属性/位置。
**常用参数**:`groupId`(组 ID,来自 `browser_tabgroup_list`,`-1` 表示无组)、`tabIds`(JSON 数组字符串,如 `'[123, 456]'`,必须从 `browser_tab_list` 获取真实 ID,禁止猜测)、`title`(组名)、`color`(`grey` `blue` `red` `yellow` `green` `pink` `purple` `cyan` `orange`)、`collapsed`(是否折叠,`--collapsed` 为真 / `--no-collapsed` 为假)、`index`(窗口中的位置,`-1` 表示移到末尾)。
**输出**:`list` / `update` / `add_tabs` 返回组对象;`get` 额外返回组内标签页:
```json
{"groupId": 7, "title": "Research", "color": "blue", "collapsed": false, "shared": false, "windowId": 1, "tabCount": 3, "isSessionGroup": false, "sessionId": ""}
```
> **前置条件**:`groupId` 和 `tabId` 无法猜测或构造,必须先调用 `browser_tab_list`(取 `tabIds`)或 `browser_tabgroup_list`(取 `groupId`)。
>
> **`browser_tabgroup_close`** 会关闭组内所有标签页;Chrome 没有销毁 API,组清空后即消失。
>
> **⚠️ AI 会话组保护**:`browser_start_session` 创建的标签组是 AI 的工作区。AI 任务**运行期间**,所有**变更类**命令**拒绝**作用于活跃会话组并返回错误;只读命令始终允许。判定依据是扩展维护的会话→组映射(而非组名),自定义 `--title` 也同样生效。任务结束(`browser_end_session` 或空闲超时)后组不再受保护。释放会话组请调用 `browser_end_session`。
>
> `browser_tabgroup_list` / `browser_tabgroup_get` 还返回 `isSessionGroup` 和 `sessionId`,可一眼分辨哪些组是 AI 工作区。
### 对话框
```bash
browser_dialog --action <accept|dismiss> [--text "<输入>"]
```
### 任务录制
```bash
task_begin --description "<描述>"
task_end
task_latest # 获取最近一次录制
```
> **何时使用**:仅在用户明确要求录制/保存/复用时使用(触发词:「录制一下」「保存为脚本」「下次还要用」)。未明确要求时不要使用。
>
> **调用 `task_begin` 前**:必须先阅读 [references/playbook.md](./references/playbook.md) 的录制质量规则,这是录制可复用的前提。
>
> **`task_end` 之后**:原始录制不能直接回放。调用 `task_latest`,再按 [references/playbook.md → 从录制到 Playbook](./references/playbook.md) 生成、保存并验证 playbook JSON。
### Playbook 与回放
```bash
playbook_list # 列出可用 playbook
browser_replay --script <路径> [--variables '{"键":"值"}']
```
> **使用方法**:
>
> 1. `playbook_list` 返回可用 playbook 的 `path`、`name`、`description` 和 `params`(必需变量)。
> 2. 按名称/描述/URL 将用户任务与返回的 playbook 匹配。
> 3. 读取匹配 playbook 的 `params`,确定 `--variables` 需要哪些键。
> 4. 以 JSON 传入变量:`--variables '{"param1": "value1"}'`
>
> ⚠️ `browser_replay` 可能**长达 10 分钟**。耐心等待——不要中断、重试或退回手动模式。
>
> 完整输出格式见 [references/commands-extended.md](./references/commands-extended.md)。
### 工具命令
```bash
browser_done --success --text "<消息>"
status
list
```
> `browser_done` 仅用于状态上报,**不能**替代 `browser_end_session`,也不会释放会话映射。
---
## ⚠️ 技能工作流(强制)
> **每个浏览器自动化任务必须包裹在 `browser_start_session` / `browser_end_session` 中(操作已打开标签页时用 `browser_attach_session` / `browser_end_session`),且在任何 `task_begin` 或 `browser_go_to_url` 之前必须先执行 `playbook_list`。** 开始手动自动化前必须先检查已有 playbook。
### 决策流程
```text
步骤0:意图分类
├── ① 浏览器内部资源(书签、历史记录等)
│ → 本技能无此能力,告知用户超出范围,不调用任何 browser_* 命令。
├── ② 分析已打开的标签页(当前标签,或按标题/语义选中的标签)
│ → 使用下方「分析已有标签页」路径,不要开新窗口。
└── ③ 新浏览器任务(打开网站、填表、点击等)
→ 继续步骤1 ↓
步骤1:browser_start_session ← ⛔ 意图③强制:第一条命令,无例外
步骤2:playbook_list ← ⛔ 强制:任何导航前必须调用
步骤3:有匹配?
├── 有 → browser_replay ← 分支A:回放
└── 无 → 手动自动化
├── 录制模式 ← 分支B:用户明确要求录制
│ task_begin
│ browser_* 操作...
│ task_end
│ → 然后按 references/playbook.md 继续
└── 非录制模式 ← 分支C:一次性任务
browser_* 操作...
步骤4:browser_end_session ← ⛔ 强制:无论成败都要执行
```
> **⛔ 不可协商的规则:**
>
> 1. `browser_start_session` 之后、任何 `browser_go_to_url` 或其他浏览器命令之前,**每次都必须调用 `playbook_list`**——无例外、无捷径。
> 2. **任务结束时必须调用 `browser_end_session`**,无论成功、失败、报错、提前退出还是用户中断。把它当成 `finally` 块——它总会执行。
**录制(分支B)仅在用户明确要求时触发。** 触发词:「录制一下」「保存为脚本」「做成可复用的」「下次还要用」。没有明确要求时使用**分支C**(非录制),**不要**用 `task_begin` / `task_end` 包裹操作。
### 分析已有标签页(意图②——不要开新窗口)
当用户想分析**已打开**的标签页时,不要调用 `browser_start_session`:
```text
1. browser_tab_list
→ 返回所有打开的标签页(tabId / tabTitle / tabUrl / active / groupId / sessionId / inSession)。
→ active=true 表示当前激活标签;inSession=true(sessionId 非空)表示已属于某个 AI 会话组。
2. 根据用户意图(标题 / URL / 语义)选定目标标签页。
3. 按分析深度分支:
├── 仅读内容(阅读 / 总结 / 问答)
│ → browser_get_tab_content --tabId <id>
│ (无需会话、无需激活、无需切换、无需新窗口)
└── 深度分析 / 信息挖掘(需要按钮、控件、链接)
→ 记下当前激活标签页
→ browser_attach_session --tabIds "[<目标tabId>]" [--primaryTabId <id>] [--sessionId <id>]
→ browser_snapshot (默认 axtree,暴露按钮、控件、链接)
→ ...按需交互...
→ browser_end_session --sessionId <id> ← ⛔ 强制:释放 sessionId
```
> **`browser_snapshot` 与 `browser_snapshot --markdown` 的区别**:默认快照返回带索引的可交互元素,用于深度分析或交互;`--markdown` 只返回干净的 Markdown 文本,**不含**按钮/控件信息,仅用于一次性内容阅读。
### 人机协同验证点
如果网站要求验证码、短信/邮箱验证码、MFA/2FA、扫码登录、设备确认或其他人工验证步骤:
- 在该节点暂停自动化。
- 保持当前会话存活。
- 用**交互式提问对话框**(能中断并询问用户的工具)提示用户手动完成验证,而非普通聊天文本,确保提示醒目。
- 验证完成后才继续。
遇到人工验证墙时**不要**盲目重试回放或切换分支。
> **工具发现(不要硬编码工具名)。** 本技能可能运行在以不同名称提供相同能力的环境中。需要某种能力时,按**功能**识别,再使用当前环境实际存在的等价工具:
>
> - **询问用户/中断获取输入** → 寻找用户提问类工具;不存在时退回普通聊天文本。
> - **读取或描述图像** → 寻找视觉/图像理解工具(OCR、图像描述、截图分析);不存在时跳过视觉确认,仅依赖 DOM/文本探测。
>
> 不要假设某个具体工具名存在;按能力匹配,缺失时优雅降级。
### 识别登录、验证码与反爬拦截
**仅在出现疑点时检查——不要每步都跑。** 正常加载的页面无需验证。出现以下任一迹象时才启动检查:
- 预期内容始终不渲染:`browser_wait` 后列表/搜索/任务页连续 2 次以上仍停留在占位状态(如「加载中…」),预期元素缺失。
- 页面外壳(页头/导航/页脚)存在但主内容区为空。
- 标签页 URL 或标题含 `login` / `passport` / `captcha` / `verify`,或被重定向到登录域名。
- `browser_snapshot`(axtree)显示遮罩式关闭控件或不透明全屏遮罩层。
发现疑点后按以下顺序确认——**优先用本技能自身能力**:
1. **通过 `browser_eval_content_js` 做 DOM 探测(首选)。** JS 能看到快照看不到的信号——尤其是嵌入**跨域 iframe** 的登录表单(快照不会展开)。检查:可见的 `<iframe>` 且 `src` 匹配 `login.|passport.|captcha.`(用 `getBoundingClientRect()` 宽高 > 0 验证可见性)、接近视口尺寸的全屏遮罩、占位文本仍在而预期内容缺失。
2. **通过 `browser_snapshot --markdown` 或 `browser_get_tab_content` 读页面文本。** 在可读文本中检索「请重新登录」「验证码」「滑动验证」等。⚠️ 跨域登录 iframe 内的文本**不会**出现在这里——其缺失不能排除登录墙。
3. **视觉确认(仅兜底)。** 前两步仍无法判断时,运行 `browser_screenshot`,把图像交给视觉/图像理解工具读取弹窗文字。仅作确认手段,不做默认第一步。
确认登录/验证码/反爬墙后,停止重试,按「人机协同验证点」处理:暂停、保持会话、用交互式提问让用户手动完成,然后重跑同样的 DOM 探测确认墙已消失(登录 iframe 消失或预期内容出现)再继续。
### 步骤1:启动会话(仅意图③必需)
```bash
qqbrowser-skill browser_start_session --sessionId task-<用途>-<计数> [--initialUrl <url>]
```
`sessionId` 每个任务必须唯一(如 `task-form-001`)。完整参数与幂等规则见 [references/session-lifecycle.md](./references/session-lifecycle.md)。
> **意图②(分析已打开标签页)不要调用 `browser_start_session`。** 该命令总是在新的 Chrome 标签组中新建标签页,不会作用于用户已打开的标签页。
### 步骤2:检查 Playbook(⛔ 强制——不可跳过,无例外)
```bash
qqbrowser-skill playbook_list
```
**此步骤不可协商。** 每次都必须调用,即使:
- 你确信没有匹配的 playbook。
- 组合流水线中刚完成一个子任务、正在开始下一个。
- 用户请求看起来琐碎或一次性。
按 `name`、`description`、关键词、目标 URL 和副作用特征匹配。
- **只读/低风险任务**(读取、提取、总结、查看):高置信度部分匹配也倾向回放。
- **有副作用的任务**(发帖、提交、发消息、购买、删除、发布):仅当任务意图、目标站点、入口页面和关键副作用明确等价时才允许回放。
- 等价性不确定时,**不要**盲目回放——询问用户或退回更安全的路径。
### 步骤3:按匹配结果分支
#### 分支A —— 有匹配 → 回放
> ⚠️ **`browser_replay` 可能运行长达 10 分钟。** 等它返回——**运行期间绝不中断、重试或退回手动模式。** 回放操作通常**不幂等**(发帖、提交、发消息),过早重试会造成重复副作用。
```bash
qqbrowser-skill browser_replay --script <路径> --variables '{...}'
```
**副作用任务的安全门**:回放可能产生真实世界副作用的 playbook 前,逐项确认:
1. 目标站点/账号/页面符合用户意图。
2. 必需变量完整且无歧义。
3. 预期结果与原 playbook 的结果一致。
4. 用户已明确授权执行实际操作。
任一项不确定,就不要盲目回放。优先草稿模式、测试数据、人工复核或用户明确确认。
**回放失败时**:先查看失败步骤及错误详情;不要立即在真实目标上重试同一回放;有副作用任务不要自动退回手动执行;只读任务在失败明确无破坏性时可手动兜底。
#### 分支B —— 无 playbook + 用户要求录制 → 录制模式
> **调用 `task_begin` 前必须阅读 [references/playbook.md](./references/playbook.md)。**
```bash
qqbrowser-skill task_begin --description "描述任务"
qqbrowser-skill browser_go_to_url --url <url>
qqbrowser-skill browser_snapshot
# ...按索引交互...
qqbrowser-skill task_end
```
**`task_end` 后**,按 [references/playbook.md](./references/playbook.md) 继续生成 playbook JSON。
#### 分支C —— 无 playbook + 未要求录制 → 纯手动
一次性任务的默认路径。**不要**调用 `task_begin` / `task_end`。**仍要先调用 `playbook_list`**(步骤2 对所有分支强制)。
```bash
qqbrowser-skill playbook_list # ⛔ 强制——不可跳过
qqbrowser-skill browser_go_to_url --url <url>
qqbrowser-skill browser_snapshot
# ...按索引交互...
```
### 步骤4:结束会话(⛔ 强制——像 `finally` 块一样总是执行)
```bash
qqbrowser-skill browser_end_session --sessionId task-<用途>-<计数>
```
**此步骤不可协商。** 每个任务结束时必须调用,无论结果如何:成功 → 调用;失败报错 → 调用;中断/提前退出 → 调用;需要人工验证(验证码等)→ 验证期间保持会话,验证完成后调用。
**绝不留下悬空会话。** 调用过 `browser_start_session`,就必须在结束前调用 `browser_end_session`。
---
## 常用模式
### 表单提交
```bash
qqbrowser-skill browser_start_session --sessionId task-form-001 --initialUrl https://example.com/signup
qqbrowser-skill playbook_list
qqbrowser-skill browser_snapshot
qqbrowser-skill browser_input_text --index "<姓名索引>" --text "王小明"
qqbrowser-skill browser_input_text --index "<邮箱索引>" --text "user@example.com"
qqbrowser-skill browser_select_dropdown_option --index "<省份索引>" --text "广东"
qqbrowser-skill browser_click_element --index "<提交索引>"
qqbrowser-skill browser_wait --seconds 2
qqbrowser-skill browser_snapshot # 验证结果
qqbrowser-skill browser_end_session --sessionId task-form-001
```
### 数据提取
| 方式 | 时机 | 可回放? |
| --- | --- | --- |
| `browser_snapshot --markdown` | AI 一次性阅读/总结页面(仅分支C) | ❌ |
| `browser_snapshot` + `browser_get_info` | 读取某个元素的文本/属性 | ❌ |
| `browser_eval_content_js` | 结构化 JSON / 多条数据 / **分支B中唯一安全选项** | ✅ |
```bash
qqbrowser-skill browser_start_session --sessionId task-extract-001 --initialUrl https://example.com/products
qqbrowser-skill playbook_list
qqbrowser-skill browser_eval_content_js --script "JSON.stringify(Array.from(document.querySelectorAll('.product-item')).slice(0,10).map(el=>({name:el.querySelector('.name')?.textContent?.trim(), price:el.querySelector('.price')?.textContent?.trim()})))"
qqbrowser-skill browser_end_session --sessionId task-extract-001
```
### 无限滚动
```bash
qqbrowser-skill browser_start_session --sessionId task-feed-001 --initialUrl https://example.com/feed
qqbrowser-skill playbook_list
qqbrowser-skill browser_scroll_to_bottom
qqbrowser-skill browser_wait --seconds 2
qqbrowser-skill browser_snapshot
qqbrowser-skill browser_end_session --sessionId task-feed-001
```
---
## 关键概念
- **元素索引**:形如 `2_sfli_qp0u` 的编码字符串。由 `browser_snapshot` 生成,用于定位元素。**每次快照都会重新生成索引**——复用前必须重新快照。**禁止编造 `1`、`2` 之类的数字索引;必须从最新 `browser_snapshot` 输出中原样复制编码索引。**
- **快照**:返回带索引元素的页面内容。任何 DOM 变化(导航、提交表单、弹窗、AJAX)后都要重新快照。活跃会话内的多数 `browser_*` 命令已在响应中返回最新页面状态,仅在确需全新交互视图或上次响应不足时才单独调用 `browser_snapshot`。
- **会话**:新浏览器任务(意图③)必须用 `browser_start_session` / `browser_end_session` 包裹以实现标签组隔离。已打开标签页的任务(意图②)用 `browser_attach_session` / `browser_end_session`(深度分析)或 `browser_get_tab_content`(仅读内容,无需会话)。
- **任务录制**:打算回放的手动浏览器任务必须用 `task_begin` / `task_end` 包裹以生成 playbook。
- **Playbook**:参数化 JSON 脚本,无需 AI 决策即可回放已录制的任务。
---
## 参考文件(按需加载)
| 参考 | 加载时机 |
| --- | --- |
| [references/commands-extended.md](./references/commands-extended.md) | 需要 `browser_snapshot --markdown` 用法详解、`browser_replay` 输出格式或高级参数语义 |
| [references/session-lifecycle.md](./references/session-lifecycle.md) | 需要完整会话规则(启动/接管/结束)、用户请求是含多个浏览器子任务的**组合任务**、或正在分析已打开的标签页 |
| [references/playbook.md](./references/playbook.md) | 用户要求**录制/保存/复用**、生成/编辑 playbook JSON、或运行可复用浏览器任务 |
---
## 注意事项
- 元素索引在单次快照内稳定,但导航后会变化——页面变化后必须重新快照。
- 表单字段用 `browser_input_text`,确保已有文本被清空。
- 元素索引跨会话不稳定时,用 `browser_find_and_act` 的语义定位。使用说明
# QQ浏览器自动化助手 面向 AI 的浏览器自动化 CLI 工具,每个任务运行在独立的 Chrome 标签组中,支持实时自动化与可复用 playbook 回放。 ## 适用场景 - 打开、导航或操作网页:填表、点击、截图、下载、查看页面 - 提取网页结构化数据、分析已打开的标签页 - 录制浏览器任务为可复用脚本,下次一键回放 ## 最简用法 ```bash pipx install qqbrowser-skill && qqbrowser-skill install qqbrowser-skill browser_start_session --sessionId task-demo-001 --initialUrl https://example.com qqbrowser-skill browser_snapshot qqbrowser-skill browser_end_session --sessionId task-demo-001 ``` ## 说明 - 强制会话隔离:任务包裹在 `browser_start_session` / `browser_end_session` 中 - 任何导航前先 `playbook_list` 检查可复用脚本 - 平台支持:Linux x86_64、Windows、macOS
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手