一键导入
spa-doc-extractor
自动化提取单页应用(SPA)技术文档内容的工具。使用agent-browser进行浏览器自动化,支持动态内容加载、多页面爬取、结构化数据提取和截图保存。适用于需要从Vue/React/Angular等框架构建的文档网站(如官方文档、API文档、技术教程)提取内容的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
自动化提取单页应用(SPA)技术文档内容的工具。使用agent-browser进行浏览器自动化,支持动态内容加载、多页面爬取、结构化数据提取和截图保存。适用于需要从Vue/React/Angular等框架构建的文档网站(如官方文档、API文档、技术教程)提取内容的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
HBuilderX CLI 命令行工具完整使用指南。Use when working with HBuilderX CLI commands, especially when: (1) Running uni-app projects on web, app, or mini-program platforms, (2) Packaging apps for Harmony OS or other platforms, (3) Publishing projects to various platforms, (4) Viewing logs for debugging, (5) Managing uniCloud services, (6) Listing devices for deployment. Covers launch, pack, publish, logcat, project, uniCloud, and device management commands.
JQL数据库操作完整使用指南。Use when working with UniCloud JQL database operations, especially when: (1) Using JQL syntax for database queries in clientDB or cloud functions, (2) Implementing complex queries with JQL's simplified syntax (compared to traditional MongoDB), (3) Performing table joins using foreignKey, (4) Using tree queries, grouping, and aggregation, (5) Understanding differences between JQL and vk.baseDao approaches.
uniCloud 云函数公共模块完整使用指南。Use when working with uniCloud cloud function common modules, especially when: (1) Creating shared utility modules for multiple cloud functions, (2) Implementing common logic extraction and reuse, (3) Managing dependencies between cloud functions and common modules, (4) Understanding how to export and import common modules in uniCloud.
vk-unicloud框架的vk.baseDao.getTableData方法完整使用指南。Use when working with vk-unicloud-admin framework database queries, especially when: (1) Implementing table data queries with pagination, filtering, and sorting, (2) Using vk-data-table component in admin pages, (3) Writing cloud functions with complex database operations including joins, grouping, and aggregation, (4) Need to understand query parameters, return value structure, and performance optimization.
vk-unicloud框架的vk.baseDao数据库操作完整使用指南。Use when working with vk-unicloud-admin framework database operations, especially when: (1) Implementing CRUD operations (add, delete, update, query), (2) Performing complex queries with pagination, filtering, and sorting, (3) Implementing table joins and aggregations, (4) Using database transactions, (5) Understanding database command operators (_.command, _.aggregate).
vk-unicloud-admin框架的万能表单组件完整使用指南。Use when working with vk-data-form component for: (1) Creating dynamic forms with JSON configuration, (2) Form validation and submission, (3) Complex field types like select, date, upload, (4) Conditional field display and disabled rules, (5) Dialog form and standalone form components.
| name | spa-doc-extractor |
| description | 自动化提取单页应用(SPA)技术文档内容的工具。使用agent-browser进行浏览器自动化,支持动态内容加载、多页面爬取、结构化数据提取和截图保存。适用于需要从Vue/React/Angular等框架构建的文档网站(如官方文档、API文档、技术教程)提取内容的场景。 |
使用 agent-browser 自动化从 SPA(单页应用)网站提取技术文档内容,支持处理动态加载内容、导航多个页面、提取结构化数据和保存截图。
# 1. 打开文档网站并等待加载
agent-browser open https://example.com/docs
agent-browser wait --load networkidle
# 2. 获取页面结构
agent-browser snapshot -i
# 3. 提取内容
agent-browser get text @main-content > output.md
# 4. 截图(可选)
agent-browser screenshot --full output.png
适用于提取单个文档页面的内容。
# 打开页面
agent-browser open https://example.com/docs/introduction
agent-browser wait --load networkidle
# 获取元素引用
agent-browser snapshot -i
# 提取文本内容
agent-browser get text @main-content > docs/introduction.md
# 保存截图
agent-browser screenshot --full docs/introduction.png
适用于爬取整个文档网站。
使用脚本:scripts/batch-extract.sh
./scripts/batch-extract.sh https://example.com/docs ./output
使用 JavaScript 提取文档结构。
agent-browser open https://example.com/docs
agent-browser wait --load networkidle
# 提取所有章节标题和链接
agent-browser eval "
Array.from(document.querySelectorAll('nav a')).map(a => ({
title: a.textContent.trim(),
href: a.href
}))
" > structure.json
最简单的方式,直接提取并保存为Markdown:
# 打开页面并等待加载
npx agent-browser open https://element.eleme.cn/#/zh-CN/component/quickstart
npx agent-browser wait --load networkidle
# 直接提取文本内容
npx agent-browser get text .page-component__content > element-quickstart.md
关键点:
npx agent-browser 确保使用最新版本wait --load networkidle 等待所有网络请求完成.md 文件# 使用批量提取脚本
./scripts/batch-extract.sh \
--url https://example.com/docs \
--output ./extracted-docs \
--selector ".sidebar a" \
--content-selector "main"
agent-browser open https://example.com/docs
agent-browser wait --load networkidle
agent-browser snapshot -i
# 点击侧边栏导航到特定章节
agent-browser find text "快速开始" click
agent-browser wait --load networkidle
# 提取内容
agent-browser get text @main-content > quick-start.md
# 登录并保存状态
agent-browser open https://app.example.com/login
agent-browser snapshot -i
agent-browser fill @email "user@example.com"
agent-browser fill @password "password"
agent-browser click @submit
agent-browser wait --url "**/dashboard"
agent-browser state save auth.json
# 后续使用保存的状态
agent-browser state load auth.json
agent-browser open https://app.example.com/docs
agent-browser wait --load networkidle
agent-browser get text @main-content > docs.md
完整示例:提取 Element UI 快速开始文档
# 1. 打开页面
npx agent-browser open https://element.eleme.cn/#/zh-CN/component/quickstart
# 2. 等待页面完全加载(重要!)
npx agent-browser wait --load networkidle
# 3. 提取内容(Element UI 使用 .page-component__content 作为主容器)
npx agent-browser get text .page-component__content > element-quickstart-raw.md
# 4. 手动格式化(如果需要)
# 将纯文本转换为结构化的 Markdown,添加标题层级、代码块等
SPA 必须等待内容完全加载:
# 等待网络空闲(推荐)
agent-browser wait --load networkidle
# 等待特定文本出现
agent-browser wait --text "文档已加载"
# 等待特定元素出现
agent-browser wait @content-area
# 等待 URL 匹配模式
agent-browser wait --url "**/docs/*"
页面变化后必须重新快照:
# 页面1
agent-browser open page1.html
agent-browser snapshot -i
agent-browser click @next-page
# 必须重新快照获取新引用
agent-browser wait --load networkidle
agent-browser snapshot -i
agent-browser get text @main-content # 使用新的引用
while true; do
# 提取当前页
agent-browser get text @content > "page$page.md"
# 检查是否有下一页
if ! agent-browser is visible @next-button; then
break
fi
# 点击下一页
agent-browser click @next-button
agent-browser wait --load networkidle
agent-browser snapshot -i
page=$((page + 1))
done
agent-browser --headed open https://example.com/docs
agent-browser errors
agent-browser is visible @element
agent-browser is enabled @element
agent-browser highlight @element
参见 scripts/ 目录中的示例脚本:
batch-extract.sh - 批量提取多个页面single-page-extract.sh - 单页面提取模板structured-extract.sh - 结构化数据提取常见的内容选择器:
| 网站类型 | 主内容选择器 | 侧边栏选择器 | 示例网站 |
|---|---|---|---|
| VuePress | .theme-default-content | .sidebar | Vue.js 官方文档 |
| VitePress | .VPDoc | .VPDocAside | Vite 官方文档 |
| Docusaurus | article | .sidebar | React 官方文档 |
| GitBook | .page-content | .summary | 各种 GitBook 文档 |
| Element UI | .page-component__content | .nav-component | element.eleme.cn |
| Ant Design | .markdown | .aside-container | ant.design |
| Vue Router | .content | .sidebar | router.vuejs.org |
| Vuex | .content | .sidebar | vuex.vuejs.org |
| 通用 | main, article, #content | .nav, .sidebar, [role="navigation"] | - |
中文技术文档常见选择器:
# Element UI / Element Plus
.page-component__content
# Ant Design / Ant Design Vue
.markdown, .markdown-api
# Vue 生态系统
.content, .theme-default-content
# 通用中文文档
main, article, .doc-content, .page-content
如何找到正确的选择器:
# 1. 打开页面并快照
npx agent-browser open https://example.com/docs
npx agent-browser wait --load networkidle
npx agent-browser snapshot -i
# 2. 在浏览器开发者工具中检查元素
# 右键点击主内容区域 -> 检查 -> 查看容器的 class 或 id
# 3. 测试选择器是否正确
npx agent-browser eval "document.querySelector('.your-selector').textContent"
# 使用状态保存加速重复访问
agent-browser state save session.json
# 添加延迟避免被限速
agent-browser wait 1000
# 使用 JSON 输出解析结果
agent-browser get text @content --json | jq -r '.content' > output.txt
直接提取的文本通常是纯文本,需要手动或自动格式化:
方法1:手动格式化(推荐用于重要文档)
# 提取原始文本
npx agent-browser get text .page-component__content > raw.md
# 使用编辑器手动格式化:
# 1. 添加标题层级(#, ##, ###)
# 2. 将代码块包裹在 ``` 中
# 3. 调整列表格式
# 4. 添加适当的空行
方法2:使用脚本自动格式化
创建格式化脚本 format-doc.js:
// 简单的 Markdown 格式化脚本
const fs = require('fs');
const content = fs.readFileSync('raw.md', 'utf8');
// 1. 识别标题(全大写或特殊格式的行)
let formatted = content.replace(/^([A-Z\s]{10,})$/gm, '\n## $1\n');
// 2. 识别代码块(缩进或特殊标记)
formatted = formatted.replace(/ (.+)/g, ' $1');
// 3. 修复列表格式
formatted = formatted.replace(/^(\d+)\.\s+/gm, '$1. ');
fs.writeFileSync('formatted.md', formatted);
方法3:使用 AI 辅助格式化
# 提取后让 AI 帮助格式化
npx agent-browser get text .page-component__content > raw.md
# 使用 AI 工具(如 ChatGPT, Claude)进行格式化
# 提示词:请将以下文本格式化为标准的 Markdown 文档,包括标题层级、代码块、列表等
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 标题丢失 | 选择器未包含标题层级 | 使用更精确的选择器或手动添加 |
| 代码块未格式化 | 纯文本提取丢失格式 | 手动添加 ``` 包裹 |
| 列表混乱 | 嵌套列表缩进问题 | 调整缩进或使用 Markdown 列表语法 |
| 空行过多 | 多个连续空行 | 使用正则替换:\n{3,} → \n\n |
| 特殊字符丢失 | HTML 实体未解码 | 手动替换或使用解码工具 |
# 完整工作流
npx agent-browser open https://example.com/docs
npx agent-browser wait --load networkidle
npx agent-browser get text .content > docs-raw.md
# 使用 sed/awk 进行简单格式化
# 1. 删除多余空行
sed -i '' '/^$/N;/^\n$/D' docs-raw.md
# 2. 添加标题标记
sed -i '' 's/^第一章/# 第一章/' docs-raw.md
# 3. 识别代码块(假设代码以 4 个空格开头)
sed -i '' 's/^ /```javascript\n&/' docs-raw.md
目标:提取 https://element.eleme.cn/#/zh-CN/component/quickstart
步骤:
# 1. 打开页面
npx agent-browser open https://element.eleme.cn/#/zh-CN/component/quickstart
# 2. 等待页面完全加载
npx agent-browser wait --load networkidle
# 3. 提取内容
npx agent-browser get text .page-component__content > element-quickstart-raw.md
# 4. 手动格式化(添加标题层级、代码块等)
# 最终输出:element-ui-quickstart.md
关键发现:
.page-component__content 作为主内容容器wait --load networkidle 等待所有内容加载输出示例:
# Element UI 快速上手
本节将介绍如何在项目中使用 Element。
## 使用 vue-cli@3
我们为新版的 vue-cli 准备了相应的 Element 插件...
## 引入 Element
### 完整引入
在 main.js 中写入以下内容:
```javascript
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
### 案例2:Vue Router 官方文档
```bash
# 打开 Vue Router 指南
npx agent-browser open https://router.vuejs.org/zh/guide/
npx agent-browser wait --load networkidle
# VuePress 使用 .theme-default-content
npx agent-browser get text .theme-default-content > vue-router-guide.md
# 打开 Ant Design Vue 快速开始
npx agent-browser open https://antdv.com/docs/vue/getting-started-cn/
npx agent-browser wait --load networkidle
# Ant Design 使用 .markdown
npx agent-browser get text .markdown > ant-design-vue-quickstart.md
#!/bin/bash
# 批量提取 Element UI 组件文档
components=("button" "input" "select" "form" "table")
for comp in "${components[@]}"; do
echo "提取 $comp 组件文档..."
npx agent-browser open "https://element.eleme.cn/#/zh-CN/component/$comp"
npx agent-browser wait --load networkidle
npx agent-browser get text .page-component__content > "docs/element-$comp.md"
sleep 2 # 避免请求过快
done
echo "提取完成!"
wait --load networkidlebatch-extract.sh - 批量提取多个文档页面single-page-extract.sh - 单页面提取脚本structured-extract.sh - 结构化数据提取脚本selectors-guide.md - 常见文档网站选择器指南advanced-patterns.md - 高级提取模式和技巧wait --load networkidle--headed 模式查看实际渲染snapshot -i 更新引用agent-browser --proxy http://proxy.com:8080export LANG=zh_CN.UTF-8file -I output.mdiconv -f GBK -t UTF-8 input.md > output.md# 基础流程
npx agent-browser open <URL> # 打开页面
npx agent-browser wait --load networkidle # 等待加载
npx agent-browser get text <selector> > file.md # 提取内容
# 调试命令
npx agent-browser --headed open <URL> # 显示浏览器窗口
npx agent-browser snapshot -i # 获取元素引用
npx agent-browser screenshot --full file.png # 截图
# 状态管理
npx agent-browser state save session.json # 保存状态
npx agent-browser state load session.json # 加载状态
# Vue 生态系统
VuePress: .theme-default-content
VitePress: .VPDoc
Vue Router: .content
Vuex: .content
# UI 组件库
Element UI: .page-component__content
Ant Design: .markdown
Ant Design Vue: .markdown
Element Plus: .content
# 通用选择器
main, article, .content, .doc-content, .page-content
#!/bin/bash
# SPA 文档提取模板
URL="https://example.com/docs"
SELECTOR=".content"
OUTPUT="output.md"
# 1. 打开页面
npx agent-browser open "$URL"
# 2. 等待加载
npx agent-browser wait --load networkidle
# 3. 提取内容
npx agent-browser get text "$SELECTOR" > "$OUTPUT"
# 4. 清理和格式化
# 删除多余空行
sed -i '' '/^$/N;/^\n$/D' "$OUTPUT"
echo "文档已提取到: $OUTPUT"
npx agent-browser - 确保使用最新版本wait --load networkidle 是关键