ActionbookScraperSkill actionbook-scraper

Actionbook Scraper技能是一个自动化网页数据抓取工具,能够使用Actionbook验证的选择器生成和验证网络爬虫脚本,自动修正错误,确保数据抓取的准确性和效率。

数据分析 0 次安装 1 次浏览 更新于 2/27/2026

以下是对Actionbook Scraper Skill的中文翻译:

Actionbook Scraper 技能

⚠️ 重要:两步验证

每个生成的脚本必须通过两个检查:

检查 验证内容 失败示例
第1部分:脚本运行 无错误,无超时 选择器未找到
第2部分:数据正确 内容与预期匹配 提取到的是“点击展开”而不是名称
┌─────────────────────────────────────────────────────┐
│   1. 生成脚本                                │
│          ↓                                          │
│   2. 执行脚本                                 │
│          ↓                                          │
│   3. 检查第1部分:脚本无错误运行?      │
│          ↓                                          │
│   4. 检查第2部分:数据内容正确?         │
│      - 不为空                                    │
│      - 不是占位符文本(“加载中...”)          │
│      - 不是UI文本(“点击展开”)              │
│      - 字段正确映射                      │
│          ↓                                          │
│      ┌───┴───┐                                      │
│   BOTH Pass  Either Fails                           │
│      │           │                                  │
│      │           ↓                                  │
│      │       Is it Actionbook data issue?           │
│      │           │                                  │
│      │       ┌───┴───┐                              │
│      │      Yes      No                             │
│      │       │       │                              │
│      │       ↓       ↓                              │
│      │    Log to   Fix script                       │
│      │    .actionbook-issues.log                    │
│      │       │       │                              │
│      │       └───┬───┘                              │
│      │           ↓                                  │
│      │       Retry (max 3x)                         │
│      ↓                                              │
│   输出脚本                                     │
└─────────────────────────────────────────────────────┘

默认输出格式

/actionbook-scraper:generate <url>

默认 = agent-browser脚本(bash命令)

agent-browser open "https://example.com"
agent-browser scroll down 2000
agent-browser get text ".selector"
agent-browser close

带 --standalone 标志

/actionbook-scraper:generate <url> --standalone

输出 = Playwright JavaScript代码


验证要求

两步验证

每个生成的脚本必须通过两个检查:

检查 验证内容 失败操作
1. 脚本运行 无错误,无超时 修复语法/选择器错误
2. 数据正确 内容与预期字段匹配 修复提取逻辑

第1部分:脚本执行检查

  • 无运行时错误
  • 无超时错误
  • 浏览器正确关闭

第2部分:数据内容检查(重要)

验证提取的数据与预期结构匹配:

预期:公司名称,描述,网站,成立年份
实际:   "点击展开", "加载中...", 空字符串

→ 失败:数据内容不正确,需要修复提取逻辑

数据验证规则:

规则 示例失败 修复
字段不为空 name: "" 检查选择器是否指向正确元素
无占位符文本 name: "Loading..." 添加等待动态内容
无UI文本 name: "Click to expand" 提取后展开,不是按钮文本
正确的数据类型 year: "View Details" 选择器错误,修复字段映射
合理的计数 预期约100,得到3 添加滚动/分页处理

针对agent-browser脚本

  1. 执行生成的命令
  2. 检查脚本无错误运行
  3. 检查数据内容正确:
    • 字段与预期结构匹配
    • 值是实际数据,不是UI文本
    • 计数合理
  4. 如果失败:
    • 分析哪里错了(脚本错误vs数据错误)
    • 修复选择器,等待逻辑,或提取
    • 重新执行
  5. 如果成功:
    • 输出验证过的脚本
    • 显示数据预览与字段验证

针对Playwright脚本(–standalone)

  1. 将脚本写入临时文件
  2. node script.js 运行
  3. 检查脚本无错误运行
  4. 检查输出数据正确:
    • JSON结构与预期字段匹配
    • 值包含实际数据
    • 计数与预期范围匹配
  5. 如果失败:
    • 分析错误类型
    • 修复脚本
    • 重新运行
  6. 如果成功:
    • 输出验证过的脚本

架构概览

/generate <url>              → 输出:agent-browser bash命令
/generate <url> --standalone → 输出:Playwright .js文件
┌─────────────────────────────────────────────────────────────┐
│                   /generate <url>                           │
│                                                             │
│   1. 搜索Actionbook → 获取选择器                      │
│   2. 生成输出:                                       │
│                                                             │
│      WITHOUT --standalone    │    WITH --standalone         │
│      ─────────────────────   │    ──────────────────        │
│      agent-browser命令  │    Playwright .js代码       │
│                              │                              │
│      ```bash                 │    ```javascript             │
│      agent-browser open ...  │    const { chromium } = ...  │
│      agent-browser get ...   │    await page.goto(...)      │
│      agent-browser close     │    ```                       │
│      ```                     │                              │
└─────────────────────────────────────────────────────────────┘

工具优先级

操作 主要工具 备用 注释
为URL查找选择器 search_actions 按域名/关键词搜索
获取完整选择器详情 get_action_by_id 使用来自搜索的action_id
列出可用源 list_sources search_sources 浏览所有索引网站
生成agent-browser脚本 Agent (sonnet) - 默认模式为 /generate
生成Playwright脚本 Agent (sonnet) - 使用 --standalone标志
结构分析 Agent (haiku) - 解析Actionbook响应
请求新网站 agent-browser 手动 提交到actionbook.dev(唯一执行agent-browser的命令)

工作流规则

重要:生成 → 验证 → 修复

每个生成的脚本都必须通过执行来验证。

步骤 操作
1 使用Actionbook选择器生成脚本
2 执行脚本以验证其工作
3 如果失败:分析错误,修复脚本,返回步骤2
4 如果成功:输出验证过的脚本+数据预览

验证过程

对于agent-browser脚本:

# 执行每个命令
agent-browser open "https://example.com"
agent-browser wait --load networkidle
agent-browser get text ".selector"
# 检查是否返回数据
# 如果错误 → 修复并重试
agent-browser close

对于Playwright脚本(–standalone):

# 写入临时文件并执行
node /tmp/scraper.js
# 检查输出文件是否有数据
# 如果错误 → 修复并重试

重要规则

  1. 总是验证生成的脚本 - 执行并检查两部分
  2. 第1部分:脚本必须运行 - 无错误,无超时
  3. 第2部分:数据必须正确 - 不为空,不是UI文本,字段映射正确
  4. 自动修复错误 - 不要输出破损的脚本或错误的数据
  5. 首先使用Actionbook MCP工具 - 永远不要猜测选择器
  6. 包括滚动处理 对于懒加载页面
  7. 包括展开/折叠逻辑 对于基于卡片的布局
  8. 总是关闭浏览器 - 包括 agent-browser close
  9. 重试最多3次 - 如果仍然失败,报告具体问题

常见数据错误捕捉

错误 示例 修复
提取到按钮文本 name: "Click to expand" 提取展开后的内容
提取到占位符 desc: "Loading..." 添加等待动态内容
空字段 name: "" 修复选择器
错误的字段映射 year: "San Francisco" 修复每个字段的选择器
项目太少 预期100,得到3 添加滚动/分页

记录Actionbook数据问题

如果Actionbook选择器错误或过时,记录到本地文件:

.actionbook-issues.log

何时记录:

  • 选择器在页面上不存在
  • 选择器返回错误的元素
  • 页面结构已更改
  • 缺少关键元素的选择器

日志格式:

[YYYY-MM-DD HH:MM] URL: {url}
Action ID: {action_id}
Issue Type: {selector_error | outdated | missing}
Details: {description}
Selector: {selector}
Expected: {它应该选择的内容}
Actual: {它实际选择的内容或错误}
---

选择器优先级

当Actionbook提供多个选择器时,优先顺序如下:

  1. data-testid - 最稳定,专为自动化设计
  2. aria-label - 基于可访问性,语义化
  3. css - 类选择器
  4. xpath - 最后的选择,最脆弱

命令

命令 描述 代理
/actionbook-scraper:analyze <url> 分析页面结构并显示可用选择器 structure-analyzer
/actionbook-scraper:generate <url> 生成agent-browser scraper脚本 code-generator
/actionbook-scraper:generate <url> --standalone 生成Playwright/Puppeteer脚本 code-generator
/actionbook-scraper:list-sources 列出具有Actionbook数据的网站 -
/actionbook-scraper:request-website <url> 请求新网站被索引(使用agent-browser) website-requester

数据流

分析命令

1. 用户:/actionbook-scraper:analyze https://example.com/page
2. 从URL提取域名 → "example.com"
3. search_actions("example page") → [action_ids]
4. 对于最佳匹配:get_action_by_id(action_id) → 完整的选择器数据
5. Structure-analyzer代理格式化并展示结果

生成命令(默认:agent-browser脚本)

用户:/actionbook-scraper:generate https://example.com/page

步骤1:搜索Actionbook
  search_actions("example.com page") → action_ids

步骤2:获取选择器
  get_action_by_id(best_match) → selectors

步骤3:生成agent-browser脚本
  ```bash
  agent-browser open "https://example.com/page"
  agent-browser wait --load networkidle
  agent-browser scroll down 2000
  agent-browser get text ".item-container"
  agent-browser close

步骤4:验证脚本(必需) 执行命令并检查是否提取数据 如果失败 → 分析错误 → 修复脚本 → 重试(最多3次)

步骤5:返回验证过的脚本+数据预览


**示例输出:**
````markdown
## 验证过的Scraper(agent-browser)

**状态**:✅ 已验证(提取50项)

运行这些命令来抓取:

```bash
agent-browser open "https://example.com/page"
agent-browser wait --load networkidle
agent-browser scroll down 2000
agent-browser get text ".item-container"
agent-browser close

数据预览

[
  {"name": "项目1", "description": "..."},
  {"name": "项目2", "description": "..."},
  // ... 显示前3项
]

### 生成命令(--standalone:Playwright脚本)

```
用户:/actionbook-scraper:generate https://example.com/page --standalone

步骤1:搜索Actionbook选择器
步骤2:获取完整的选择器数据
步骤3:生成Playwright/Puppeteer脚本
步骤4:验证脚本(必需)
  写入临时文件 → node /tmp/scraper.js → 检查输出
  如果失败 → 分析错误 → 修复脚本 → 重试(最多3次)
步骤5:返回验证过的脚本+数据预览
```

**示例输出:**
````markdown
## 验证过的Scraper(Playwright)

**状态**:✅ 已验证(提取50项)

```javascript
const { chromium } = require('playwright');
// ... 生成的代码与Actionbook选择器
```

用法:
```bash
npm install playwright
node scraper.js
```

### 数据预览
```json
[
  {"name": "项目1", "description": "..."},
  // ... 第3项
]
```

请求网站命令

1. 用户:/actionbook-scraper:request-website https://newsite.com/page
2. 启动website-requester代理(使用agent-browser)
3. 代理工作流程:
   a. agent-browser open "https://actionbook.dev/request-website"
   b. agent-browser snapshot -i (发现表单选择器)
   c. agent-browser type <url-field> "https://newsite.com/page"
   d. agent-browser type <email-field> (可选)
   e. agent-browser type <usecase-field> (可选)
   f. agent-browser click <submit-button>
   g. agent-browser snapshot -i (验证提交)
   h. agent-browser close
4. 输出:提交确认

选择器数据结构

Actionbook以这种格式返回选择器数据:

{
  "url": "https://example.com/page",
  "title": "页面标题",
  "content": "## 选择器参考

| 元素 | CSS | XPath | 类型 |
..."
}

常见选择器模式

基于卡片的布局:

容器:.card-list, .grid-container
卡片项目:.card, .list-item
卡片名称:.card__title, .card-name
卡片描述:.card__description
展开按钮:.card__expand, button.expand

详细提取(dt/dd模式):

// 键值对的常见模式
const items = container.querySelectorAll('.info-item');
items.forEach(item => {
  const label = item.querySelector('dt').textContent;
  const value = item.querySelector('dd').textContent;
});

表格布局:

表格:table, .data-table
标题:thead th, .table-header
行:tbody tr, .table-row
单元格:td, .table-cell

页面类型检测

指标 页面类型 模板
滚动加载更多 动态/无限 playwright-js (带滚动)
点击展开 基于卡片 playwright-js (带点击)
分页链接 分页 playwright-js (带分页)
静态内容 静态 puppeteer或playwright
检测到SPA框架 SPA playwright-js (网络空闲)

输出格式

分析输出

## 页面分析:{url}

### 匹配操作
- **操作ID**:{action_id}
- **置信度**:高 | 中 | 低

### 可用选择器

| 元素 | 选择器 | 类型 | 方法 |
|---------|----------|------|---------|
| {name} | {selector} | {type} | {methods} |

### 页面结构
- **类型**:{静态|动态|spa}
- **数据模式**:{cards|table|list}
- **懒加载**:{是|否}
- **展开/折叠**:{是|否}

### 建议
- 建议模板:{template}
- 需要特殊处理:{notes}

生成代码输出

## 生成的Scraper

**目标URL**:{url}
**模板**:{template}
**预期输出**:{description}

### 依赖
```bash
npm install playwright

代码

{generated_code}

用法

node scraper.js

输出

结果保存到 {output_file}


## 模板参考

| 模板 | 标志 | 输出 | 运行方式 |
|----------|------|--------|----------|
| **agent-browser** | (默认) | CLI命令 | `agent-browser` CLI |
| playwright-js | --standalone | .js文件 | `node scraper.js` |
| playwright-python | --standalone --template playwright-python | .py文件 | `python scraper.py` |
| puppeteer | --standalone --template puppeteer | .js文件 | `node scraper.js` |

## 错误处理

| 错误 | 原因 | 解决方案 |
|-------|-------|----------|
| 未找到操作 | URL未索引 | 使用 `/actionbook-scraper:request-website` 请求索引 |
| 选择器不工作 | 页面更新 | 向Actionbook报告,尝试替代选择器 |
| 超时 | 页面加载慢 | 增加超时,添加重试逻辑 |
| 空数据 | 动态内容 | 添加滚动/等待处理 |
| 表单提交失败 | 网络/页面问题 | 重试或在actionbook.dev手动提交 |

## agent-browser 使用

对于 `request-website` 命令,插件使用 **agent-browser CLI** 自动化表单提交。

### agent-browser 命令
```bash
# 打开URL
agent-browser open "https://actionbook.dev/request-website"

# 获取页面快照(发现选择器)
agent-browser snapshot -i

# 输入表单字段
agent-browser type "input[name='url']" "https://example.com"

# 点击按钮
agent-browser click "button[type='submit']"

# 关闭浏览器(始终这样做)
agent-browser close

选择器发现

如果表单选择器未知,使用快照发现它们:

agent-browser open "https://actionbook.dev/request-website"
agent-browser snapshot -i  # 返回页面结构与选择器

始终关闭浏览器

重要:任何agent-browser会话结束时,即使发生错误,始终运行 agent-browser close

速率限制

  • Actionbook MCP:本地使用无速率限制
  • 目标网站:遵守robots.txt并请求间添加延迟
  • 推荐:页面请求间1-2秒延迟

示例

示例1:生成agent-browser脚本(默认)

/actionbook-scraper:generate https://firstround.com/companies

输出:agent-browser命令
```bash
agent-browser open "https://firstround.com/companies"
agent-browser scroll down 2000
agent-browser get text ".company-list-card-small"
agent-browser close

用户运行这些命令来抓取。


### 示例2:生成Playwright脚本

/actionbook-scraper:generate https://firstround.com/companies --standalone

输出:Playwright JavaScript代码

const { chromium } = require('playwright');
// ... 完整脚本

用户运行:node scraper.js


### 示例3:分析页面结构

/actionbook-scraper:analyze https://example.com/products

输出:分析显示:

  • 可用选择器
  • 页面结构
  • 推荐方法

### 示例4:请求新网站

/actionbook-scraper:request-website https://newsite.com/data

操作:提交表单到actionbook.dev(这个命令确实执行agent-browser)


## 最佳实践

1. **总是分析后再生成** - 先了解页面结构
2. **检查list-sources** - 验证网站是否已索引,再尝试
3. **审查生成的代码** - 验证选择器是否匹配预期元素
4. **添加适当的延迟** - 对目标服务器要尊重
5. **处理边缘情况** - 空状态,加载状态,错误
6. **逐步测试** - 在全面抓取前先在小部分上运行