| name | laohan-xiazai |
| description | 从互联网拿内容一站式——视频下载、音频提取+转文字、字幕下载、评论采集、博主数据、网页抓取、搜索聚合、跨平台发布与数据分析,覆盖 30+ 平台(抖音/TikTok/YouTube/B站/小红书/知乎/公众号/视频号/微博/Reddit/HackerNews/即刻/知识星球/雪球/贴吧/头条/Twitter等),按降级链自动选择最优工具。Use when 用户说"下载""下个视频""帮我抓""抓一下""爬""爬取""读一下""读这个链接""看看这个网址""搜一下""搜索""查一下""帮我查""转文字""转录""听写字幕""评论""看看评论""抓评论""博主数据""博主更新""up主""谁谁最近发了什么""封面""发抖音""发小红书""定时发布""草稿""账号数据""粉丝数""给我截图""网页正文""这个页面讲了啥",或给出任意 URL / 短链接 / BV号 / 视频号链接 / 公众号文章链接 要求获取内容,或提到抖音/TikTok/YouTube/B站/小红书/知乎/公众号/视频号/微博 等具体平台名要求下内容、搜内容、读评论、抓数据,以及任何涉及从互联网拿内容的操作。优先按降级链选工具:搜索走 anysearch→opencli→agent-reach;下载按平台路由;抓取走 Scrapling→browser-use→web-access。 |
| version | 1.2.0 |
从互联网拿内容
按平台选择正确方法,一步到位。先看平台路由表,再读对应 reference 文件。平台方法不行时,按品类降级链逐层深入——每层解决不同问题,能浅不深。
核心理念
能浅不深——先用最轻的方法(HTTP 请求),不行再加重量(浏览器渲染→反检测→AI 操作→手动控制)。成本递增,每层解决不同问题,不要跳层。
不适用场景
- 批量爬取/爬虫开发 → 这不是爬虫框架,是一次性内容获取工具
- 需要登录才能访问且用户未登录 → 告诉用户先登录对应平台,web-access CDP 可以接管已登录的 Chrome
- 下载付费内容/会员内容 → 不处理侵权场景
前置检查(定期更新,命令报错时必做)
opencli 高频发版(每周 2-3 次),但不需要每次使用都更新——定期(如每周)更新,或命令报错/找不到新命令时再更新即可。
第1步:更新 opencli(npm 包)
npm update -g @jackwener/opencli
第2步:更新 opencli skills(npx 管理)
npx skills update -g -y
opencli 自带 4 个辅助 skill,随 opencli 仓库更新但独立于 npm 包。必须单独更新:
- opencli-usage:查命令总览,不确定有什么命令时用
- opencli-autofix:命令失败时自动诊断修复(SELECTOR 错误、页面结构变化等)
- opencli-browser:浏览器自动化操作
- opencli-adapter-author:写新的 opencli 适配器
第3步:查最新命令比对文档
opencli <platform> --help
opencli 经常加新命令(如 4 月加了 bilibili download、xiaohongshu download),SKILL 文档可能滞后。发现新命令时更新对应 reference 文件。
第4步:检查 Browser Bridge
opencli doctor
3 项全绿(Daemon + Extension + Connectivity)才能用 Cookie 命令。失败时排障:
opencli doctor 看哪项失败
- daemon 没跑 →
opencli daemon restart(opencli 自带 daemon 管理,不要用 launchctl——opencli 不提供 LaunchAgent)
- daemon 在跑但扩展未连 → 让用户
chrome://extensions/ 关开 OpenCLI 扩展
- 都 OK 还连不上 →
opencli daemon stop 后再跑任意 opencli <命令> 触发 daemon 自启
命令失败时的处理
- 先用 opencli-autofix skill 诊断:
OPENCLI_DIAGNOSTIC=1 重跑失败命令
- 修复成功 → 更新 reference 文件记录正确方法
- 修复失败 → 按降级链切换方法
快速路由
场景 A:下载(视频/音频/字幕/博主数据)
先判断平台,再读对应的 reference 文件:
| 关键词 | 平台 | reference 文件 |
|---|
| 抖音 / douyin | 抖音 | references/douyin.md |
| TT / tiktok / TikTok | TikTok | references/tiktok.md |
| YouTube / youtube / 油管 | YouTube | references/youtube.md |
| B站 / bilibili / BV | B站 | references/other-platforms.md |
| 小红书 / xhs | 小红书 | references/other-platforms.md |
| 知乎 / zhihu | 知乎 | references/other-platforms.md |
| 公众号 / 微信文章 | 微信公众号 | references/other-platforms.md |
| 视频号 / 微信视频号 | 微信视频号 | references/other-platforms.md |
不确定平台时,默认尝试 yt-dlp <url>,失败再按平台路由。
references/douyin.md 除下载/转录外,还含发布自动化(publish/draft/update)与账号数据分析——发布需求直接读该文件对应章节。
场景 B:搜索/阅读(文章/评论/帖子/搜索结果)
不走 reference 文件,直接走平台封装降级。注意:场景B 的首选方法与第一层降级表(下载场景)不同——搜索/阅读优先用 opencli 搜索命令或 agent-reach,下载才用移动端 UA / fetch.py 等。
| 平台 | 第1选 | 第2选 | 第3选 | 第4选 |
|---|
| 公众号 | opencli weixin search/download | agent-reach | fetch.py | Jina Reader |
| 知乎 | opencli zhihu | agent-reach | Jina Reader | — |
| 小红书 | opencli xiaohongshu | agent-reach | Scrapling stealthy | — |
| 微博 | opencli weibo | agent-reach | Jina Reader | — |
| B站 | opencli bilibili | agent-reach | Jina Reader | — |
| 抖音 | opencli douyin search(视频流搜索) | DrissionPage(→ references/douyin.md / /laohan-douyinsousuo,需大量采集/排序时) | agent-reach | douyin-session(评论) |
| TikTok | opencli tiktok(需 Browser Bridge) | agent-reach | Scrapling stealthy | — |
| 任意平台 | agent-reach(13平台搜索/阅读,含 GitHub/RSS/V2EX/Twitter/Reddit/小宇宙/Exa 等 opencli 不覆盖的) | web-content-fetcher | Jina Reader | Scrapling stealthy |
agent-reach 触发场景:用户说"搜一下""读一下这个链接""这个公众号文章""帮我查",或给出非视频的社交平台链接。
降级链
第一层:平台路由(Layer 2 平台封装)
每个平台方法失败时,按以下顺序降级,直到成功或全部失败才报错给用户:
| 平台 | 第1选 | 第2选 | 第3选 | 最终兜底 |
|---|
| 抖音 | 移动端 UA + iesdouyin | opencli douyin | douyin_tiktok_scraper(Python)+ douyin-session(评论) | Scrapling stealthy |
| TikTok | tikwm API | yt-dlp | opencli tiktok(需 Browser Bridge) | — |
| YouTube | yt-dlp(需 --cookies-from-browser chrome) | opencli youtube transcript(字幕) | — | — |
| B站 | opencli bilibili download(需 Browser Bridge) | Jina Reader | — | — |
| 小红书 | opencli xiaohongshu download(需 Browser Bridge) | agent-reach | Jina Reader | — |
| 知乎 | opencli zhihu | Jina Reader | — | — |
| 公众号 | opencli weixin download(导出 Markdown) | fetch.py | agent-reach | Jina Reader |
| 视频号 | wx_video_download(MITM 代理) | — | — | — |
| 未知平台 | yt-dlp | Scrapling MCP(get) | Scrapling stealthy | Jina Reader |
降级时注意:
- 抖音不存在 yt-dlp 降级路径(已验证无效),不要浪费时间尝试
- B站 yt-dlp 已被 HTTP 412 全面拦截(2026-04-28 验证),不要尝试 yt-dlp 下载B站视频
- YouTube 无 cookies 会被 bot 检测拦截,必须加
--cookies-from-browser chrome
- 每步失败后简要告诉用户换了个方法,不要静默切换
- 全部失败时,告诉用户具体哪步失败了、可能的原因、建议用户做什么
第二层:品类降级(平台路由全部失败时)
平台方法全部失败后,按能力从轻到重逐层深入。每层解决一个不同的问题:
平台封装已试过(opencli / agent-reach / yt-dlp 全部失败)
↓ 问题:普通网页抓取即可
轻量抓取 → Scrapling MCP get(普通 HTTP 请求,无 JS 渲染)
↓ 问题:页面需要 JS 渲染
JS 渲染抓取 → Scrapling MCP fetch(Playwright 浏览器渲染)
↓ 问题:被反爬拦截
反检测抓取 → Scrapling stealthy_fetch(绕过检测 + 提取内容)
↓ 问题:页面结构未知,写不出选择器
AI 浏览器 → browser-use(AI 理解页面结构、自主操作)
↓ 问题:需要登录态,或要多步交互(点击/翻页/表单/上传)/视频帧采样
CDP 接管 → web-access(接管用户日常 Chrome,天然登录态;已知需登录时跳过 browser-use 直接来这层)
↓ 问题:需要代码级精确控制,或要独立无登录态浏览器做隔离
手动驱动 → ECC Playwright MCP(代码级精确控制每一步)
每层解决的问题不同,不要跳层:
- 普通网页 → Scrapling get(最轻,HTTP 直接请求)
- JS 渲染 → Scrapling fetch(需要浏览器但不需隐身)
- 反爬拦截 → Scrapling stealthy(隐身模式绕过检测)
- 页面看不懂 → browser-use(AI 理解能力)
- 需要登录态 / 多步交互 / 视频采样 → web-access(用户日常 Chrome 的真实登录态 + 确定性 CDP API)
- 精确操作 → Playwright(人工级控制)
成本递增,能浅不深:Scrapling get(HTTP 秒级)< Scrapling fetch(浏览器秒级)< Scrapling stealthy(反检测)< browser-use(需调 LLM API)< web-access(需 CDP 连接)< Playwright(需写代码)
评论采集
详查命令见 references/other-platforms.md。opencli 是评论主力(read 8 平台 / write 3 平台),MediaCrawler 只抓不写且禁商业,不装。
| 平台 | read 评论 | write 评论 | 命令 |
|---|
| B站 | ✅(含楼中楼 --parent) | ✅ 发评论/回复 | opencli bilibili comments <bvid> / comment <bvid> <msg> |
| 小红书 | ✅(楼中楼) | ❌ | opencli xiaohongshu comments <note-id> |
| 知乎 | ✅ answer-comments | ✅ comment <target> <text> | 回答评论列表 / 发评论 |
| 微博 | ✅ | ❌ | opencli weibo comments <id> |
| 即刻 | ✅(post 含评论) | ✅ comment <id> <text> | opencli jike post <id> / comment |
| 知识星球 | ✅(topic 含评论) | ❌ | opencli zsxq topic <id> |
| 雪球 | ✅ | ❌ | opencli xueqiu comments <symbol> |
| 贴吧 | ✅(read 含回复) | ❌ | opencli tieba read <id> |
| 抖音 | △(user-videos 含热门评论,无独立 comments) | ❌ | opencli douyin user-videos;深度评论用 douyin-session adapter |
| 快手 | ❌ opencli 无此平台 | ❌ | 唯一真缺口,需另调研(移动端 UA / web-access CDP) |
批量评论/批量主页采集属爬虫框架范畴,不在本 skill(见「不适用场景」);按需取评论走 opencli。
通用兜底
| 方法 | 工具 | 场景 |
|---|
| agent-reach | agent-reach(pipx/pip 安装,官方推荐 pipx) | 13 平台搜索/阅读统一入口(Tier0 零配置:Web/YouTube/GitHub/RSS/Exa/V2EX/雪球;Tier1 需登录态:Twitter/Reddit/B站/小红书用 Cookie,小宇宙用免费 Groq Key)。管"读/搜",与 opencli(管"下载/操作")互补 |
| Jina Reader | curl -sL "https://r.jina.ai/<url>" | 通用网页内容提取 |
| web-content-fetcher | /web-content-fetcher skill | agent-reach 失败时的三级降级抓网页 |
| Scrapling stealthy | MCP stealthy_fetch | 反爬场景 |
| yt-dlp | yt-dlp <url> | 通用视频下载 |
| browser-use | /open-source skill | AI 自主操作浏览器,全新/未知页面 |
| web-access | /web-access skill | CDP 接管已登录日常 Chrome(localhost:3456),覆盖:登录态内容、复杂交互(点击/翻页/表单/上传)、视频帧采样、本地书签历史检索 |
| Playwright 手动 | ECC Playwright MCP | 精确手动控制,最后兜底 |
web-access 调用要点(降级链中唯一连用户日常浏览器的工具)
降级链其余工具(Scrapling / browser-use / Playwright MCP)都开独立无状态浏览器,唯独 web-access 直连用户日常 Chrome,天然带登录态、书签、历史。触发 /web-access 加载后按此调用:
- 启动 CDP proxy:
node "${CLAUDE_SKILL_DIR}/scripts/check-deps.mjs"(Node 22+ 必需,脚本自动启动并等待 proxy 就绪)
- 操作前必须向用户展示封禁须知:部分站点对浏览器自动化检测严格,存在账号封禁风险,已内置防护但无法完全避免,继续操作即视为接受。
- curl 调 localhost:3456 API:
/new(后台 tab,URL 走 POST body 保留完整参数)//eval(读写 DOM,递归穿透 Shadow DOM·iframe)//click·/clickAt(真实鼠标手势,触发文件对话框)//scroll(触发懒加载)//screenshot(含视频当前帧)//setFiles(上传,绕过对话框)//close(关闭自建 tab,保留用户 tab)
- 本地浏览器检索(web-access 独有):用户说"我之前看过的""公司内部系统"等公网搜不到的目标 →
node "${CLAUDE_SKILL_DIR}/scripts/find-url.mjs" 关键词 [--only bookmarks|history] [--since 7d] 查 Chrome/Edge 书签+历史
何时优先 web-access:需登录态 / 多步 GUI 交互(点击·翻页·表单·上传)/ 视频帧采样 / 本地浏览器检索——这四类其余工具都做不了或不如它。仅当页面结构完全未知、需 AI 自主探索时才用 browser-use;需代码级隔离测试时才用 Playwright MCP。
工具速查
语音转文字
| 优先级 | 工具 | 命令 | 说明 |
|---|
| 1 | 硅基流动 API | curl -X POST https://api.siliconflow.cn/v1/audio/transcriptions -H "Authorization: Bearer $SILICONFLOW_API_KEY" -F "model=FunAudioLLM/SenseVoiceSmall" -F "file=@audio.mp3" | 秒级,免费,中文优化 |
| 2 | whisper-cli | whisper-cli -m model.bin -f audio.mp3 -l zh | 本地 C++,快 |
| 3 | whisper Python | python3 -c "import whisper; ..." (small 模型) | 本地,最准 |
| 4 | whisper-timestamped | python3 -c "import whisper_timestamped; ..." | 精确时间戳,字幕制作用 |
语音合成 / 音视频处理
| 操作 | 命令 |
|---|
| 语音合成(TTS) | edge-tts --text "文本" --voice zh-CN-XiaoxiaoNeural --write-media output.mp3 |
| 音视频转码 | ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3 |
| OCR | tesseract image.png stdout -l chi_sim+eng |
| PDF 提取文本 | python3 -c "import fitz; doc=fitz.open('file.pdf'); [page.get_text() for page in doc]" |
| 图片处理 | magick input.png -resize 800x600 output.png |
搜索兜底
注:smart-search/web-search/multi-search-engine/baidu-search 位于 ~/.openclaw/skills/,需 OpenClaw 环境已安装;anysearch 在 ~/.agents/skills/(通用,无 OpenClaw 也可用)。无 OpenClaw 环境时优先 anysearch。
| 工具 | 场景 | 说明 |
|---|
| anysearch | 实时搜索+垂直领域+批量并行+URL全文提取 | 16 个垂直领域(股票/CVE/DOI/法律/学术等;Stock/CVE/DOI 是触发标识符非 domain),~/.agents/skills/anysearch/,/anysearch |
| smart-search | opencli 搜索路由 | 基于 opencli 的智能搜索,覆盖社交/技术/新闻/购物,~/.agents/skills/smart-search/ |
| web-search | 通用网页搜索 | DuckDuckGo API,轻量搜索,~/.openclaw/skills/web-search/ |
| multi-search-engine | agent-reach + Jina 都搜不到时 | 17 搜索引擎聚合对比,~/.openclaw/skills/multi-search-engine/ |
| baidu-search | 中文内容搜索 | 百度 AI 搜索,中文场景优于通用引擎,~/.openclaw/skills/baidu-search/ |
搜索优先级:通用搜索/事实查询/垂直领域 → anysearch(最轻最快)→ opencli(平台结构化数据)→ agent-reach(opencli 未覆盖的平台兜底)。
Scrapling 调用路径
| 环境 | 方式 | 说明 |
|---|
| Claude Code 主会话 | MCP 直调 mcp__ScraplingServer__stealthy_fetch | 直接可用 |
| OpenClaw 子 agent | mcporter 桥接 mcporter call ScraplingServer.stealthy_fetch url=<url> | 子 agent 无 MCP 权限,需桥接 |
关键注意事项
- 抖音反爬极强,yt-dlp/Jina 全部无效,只能用移动端 UA 方法(见
references/douyin.md)
- TikTok 用 tikwm API,CDN URL 临时,获取后立即下载
- YouTube 字幕首选
opencli youtube transcript(返回干净文本免清洗),备选 yt-dlp 的 VTT 需 clean_vtt.py 清洗(见 references/youtube.md)
- opencli Cookie 命令需要 Browser Bridge 运行(排障:
opencli doctor)