Files
Obsidian/MyBestNanobot/Nanobot分析OpenCLI.md
2026-07-21 14:53:24 +08:00

14 KiB
Raw Permalink Blame History

OpenCLI 学习总结

OpenCLI 是一个强大的 CLI 生成器和自动化工具,可以把任何网站变成命令行接口。

核心能力

功能 说明
内置适配器 87+ 网站开箱即用(小红书、知乎、B站、Twitter等)
浏览器自动化 opencli browser 直接控制浏览器点击、输入、截图
生成新适配器 explore → synthesize → generate 从真实页面推导 CLI
Electron 应用控制 驱动 Cursor、ChatGPT、Notion 等桌面应用

小红书适配器功能

opencli xiaohongshu publish --title "标题" "正文" --images a.jpg,b.jpg --topics 生活,旅行
opencli xiaohongshu feed          # 首页推荐
opencli xiaohongshu note <id>     # 获取笔记详情
opencli xiaohongshu download <id> # 下载图片视频
opencli xiaohongshu search <词>    # 搜索笔记
opencli xiaohongshu creator-notes # 创作者笔记列表
opencli xiaohongshu creator-stats # 创作者数据统计

技术架构

src/
├── main.ts          # 入口:快速路径 + 完整启动
├── cli.ts           # CLI 注册和命令分发
├── browser/         # CDP 浏览器控制
│   ├── cdp.ts       # Chrome DevTools Protocol
│   ├── page.ts      # 页面操作封装
│   └── bridge.ts    # 浏览器桥接
├── registry.ts      # 命令注册表
├── commanderAdapter.ts  # 动态命令适配
└── discovery.ts     # CLI 发现机制

clis/                # 内置适配器(87+个)
├── xiaohongshu/     # 小红书适配器
├── zhihu/           # 知乎适配器
├── bilibili/        # B站适配器
└── ...

工作原理

  1. Cookie 模式:复用浏览器登录态,直接调用 API
  2. Browser 模式:通过 CDP 控制真实浏览器,模拟用户操作
  3. 生成模式:explore 分析网站 → synthesize 推导接口 → generate 生成适配器

使用示例

# 快速发布小红书
opencli xiaohongshu publish --title "禅诗一首" "人人有这个..." \
  --images /path/to/img.jpg --topics 禅诗,诗词

# 浏览器自动化
opencli browser --url https://example.com --click "button" --screenshot

# 生成新网站适配器
opencli generate https://new-site.com

已安装版本: 1.7.3

这个项目非常强大,特别是浏览器自动化和CLI 生成功能,可以把任何 Web 操作变成可复用的命令行工具!


OpenCLI Headless 配置方案

OpenCLI 支持 CDP (Chrome DevTools Protocol) 模式,可以在无 GUI 服务器上运行。有三种方案:

方案一:本地 Chrome + SSH 隧道(推荐)

在你的本地机器(Mac/PC)上:

# 启动 Chrome 并开启远程调试
google-chrome \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/chrome-debug-profile" \
  --remote-allow-origins="*"

# 登录小红书/知乎等网站

在服务器上建立反向 SSH 隧道:

# 从服务器连接到本地机器,转发端口
ssh -R 9222:localhost:9222 your-local-machine

# 设置环境变量
export OPENCLI_CDP_ENDPOINT="http://localhost:9222"

# 验证连接
opencli doctor

# 使用
opencli xiaohongshu feed

方案二:服务器直接运行 Headless Chrome(CI/CD 模式)

# 安装 Chrome 和 xvfb
sudo apt-get install -y google-chrome-stable xvfb

# 使用 xvfb-run 运行 Chrome(虚拟显示)
xvfb-run --auto-servernum \
  google-chrome \
  --remote-debugging-port=9222 \
  --no-sandbox \
  --disable-dev-shm-usage \
  --disable-gpu \
  --headless=new &

# 设置环境变量
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9222"

# 运行
opencli xiaohongshu publish --title "测试" "内容" --images a.jpg

方案三:Docker 运行 Chrome

# 运行 headless Chrome 容器
docker run -d \
  --name chrome-headless \
  -p 9222:9222 \
  --cap-add=SYS_ADMIN \
  chromedp/headless-shell:latest \
  --remote-debugging-address=0.0.0.0 \
  --remote-debugging-port=9222

# 设置环境变量
export OPENCLI_CDP_ENDPOINT="http://localhost:9222"

关键环境变量

变量 说明 示例
OPENCLI_CDP_ENDPOINT CDP 端点地址 http://127.0.0.1:9222
OPENCLI_CDP_TARGET 选择特定目标 xiaohongshu, bilibili
OPENCLI_BROWSER_CONNECT_TIMEOUT 连接超时(秒) 30
OPENCLI_BROWSER_COMMAND_TIMEOUT 命令超时(秒) 60

架构对比

┌─────────────────────────────────────────────────────────┐
│  方案一: 本地 Chrome + SSH 隧道                           │
│  ┌──────────┐     SSH      ┌──────────────┐             │
│  │本地Chrome│◄─────────────│ 远程服务器    │             │
│  │:9222     │   -R 9222    │ opencli命令   │             │
│  └──────────┘              └──────────────┘             │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  方案二: 服务器 Headless Chrome                          │
│  ┌─────────────────────────────────────────────┐        │
│  │  服务器                                      │        │
│  │  ┌─────────────┐    ┌─────────────────────┐ │        │
│  │  │ xvfb-run    │───►│ google-chrome       │ │        │
│  │  │ (虚拟显示)   │    │ --remote-debugging  │ │        │
│  │  └─────────────┘    └─────────────────────┘ │        │
│  │                         :9222                │        │
│  │                           ▲                  │        │
│  │                           │                  │        │
│  │  ┌───────────────────────┘                  │        │
│  │  │ opencli (CDPBridge连接)                   │        │
│  │  └──────────────────────────────────────────┘        │
│  └─────────────────────────────────────────────┘        │
└─────────────────────────────────────────────────────────┘

推荐方案一:因为小红书等网站需要登录状态,本地 Chrome 可以保持登录,服务器通过隧道复用。


OpenCLI 的 explore → synthesize → generate 流程可以自动分析网站并生成 CLI 适配器:

工作流程

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   explore   │ ──► │  synthesize │ ──► │   generate  │
│  深度探索    │     │  合成 CLI   │     │  生成代码   │
└─────────────┘     └─────────────┘     └─────────────┘

具体步骤

1. Explore(探索)- 自动发现 API

opencli explore https://example.com \
  --site mysite \
  --wait-seconds 5

OpenCLI 会:

  • 启动浏览器访问页面
  • 自动滚动触发懒加载
  • 捕获所有网络请求 (XHR/Fetch)
  • 分析 JSON 响应结构
  • 识别认证方式 (Cookie/Token)
  • 检测前端框架 (React/Vue/Angular)

输出:~/.opencli/explore/mysite_20240414_xxxx/ 包含:

  • manifest.json - 站点元数据
  • endpoints.json - 发现的所有 API 端点
  • capabilities.json - 推断的功能列表

2. Synthesize(合成)- 生成 CLI 候选

opencli synthesize mysite

根据探索结果生成 YAML 格式的 CLI 定义:

  • 推荐命令名称 (search, hot, feed, detail...)
  • 参数映射 (--limit, --keyword, --page)
  • 输出列定义
  • 执行管道 (navigate → wait → evaluate → map)

输出:candidates/search.yaml

site: mysite
name: search
description: Search content on mysite
strategy: cookie
browser: false
args:
  keyword:
    type: string
    required: true
    description: Search keyword
  limit:
    type: number
    required: false
    default: 10
pipeline:
  - fetch:
      url: "https://api.example.com/search?q={{keyword}}&limit={{limit}}"
  - map:
      title: "data.items[*].title"
      url: "data.items[*].link"

3. Generate(生成)- 一键创建

# 全自动:explore → synthesize → verify → register
opencli generate https://example.com --goal search

或直接:

opencli generate https://example.com \
  --site mysite \
  --wait-seconds 5 \
  --top 3

实际例子:给小红书生成新命令

假设小红书有个新功能 "创作者数据中心" 没有现成适配器:

# 1. 探索创作者中心页面(携带 Cookie)
export OPENCLI_CDP_ENDPOINT="http://localhost:9222"

opencli explore https://creator.xiaohongshu.com/statistics \
  --site xiaohongshu-creator \
  --wait-seconds 10

# 2. 合成候选命令
opencli synthesize xiaohongshu-creator

# 3. 查看生成的候选
ls ~/.opencli/explore/xiaohongshu-creator_*/candidates/

# 4. 验证并注册
opencli verify xiaohongshu-creator/candidates/stats.yaml
opencli register xiaohongshu-creator/candidates/stats.yaml

# 5. 使用!
opencli xiaohongshu-creator stats --start-date 2024-04-01

模式 是否需要 Cookie 说明
API 模式 ✅ 需要 直接调用后端 API,需认证头/Cookie
Browser 模式 ✅ 需要 控制真实浏览器,需登录态
Store 模式 可选 从 Pinia/Vuex 读取,有时无需认证

关键技术点

explore 阶段捕获的数据:

// 网络请求拦截
{
  url: "https://edith.xiaohongshu.com/api/sns/web/v1/search/notes",
  method: "POST",
  headers: {
    "Cookie": "web_session=xxx...",
    "X-Sign": "xxx"  // 签名算法也被记录
  },
  requestBody: { keyword: "xxx", page: 1 },
  responseBody: { data: { items: [...] } }
}

自动推断:

  • keyword → --keyword 参数
  • page → --page 参数(带默认值 1)
  • items 数组 → 输出表格的行
  • data.items[*].title → title 列

总结

你给我一个网站 + Cookie,我就能自动生成 CLI 适配器

不需要手写代码,OpenCLI 通过真实浏览器行为分析自动推导:

  • API 端点
  • 参数映射
  • 认证方式
  • 数据提取路径

这是它的核心创新点:从真实交互中"学习"网站 API,而非阅读文档。


我更新了小红书的cookie,在 /home/ubuntu/xiaohongshu_cookies.txt 你根据这个cookie,实现一个我们自己的 my_iaohongshu_cli 在我们的git仓库 /home/ubuntu/nanocode目录下创建一个目录my_iaohongshu_cli,来实现这个cli

现在我完全理清了!让我给你完整梳理:


📊 小红书发布方式现状

CLI 工具(实际可执行命令)

工具 路径/来源 状态 说明
xhs uv tool install xiaohongshu-cli ✅ 在用 原版 v0.6.4,从浏览器提取 Cookie
myxhs /home/ubuntu/nanocode/my_xiaohongshu_cli/ ✅ 在用 我刚开发的,用本地 Cookie 文件
opencli xiaohongshu npm @jackwener/opencli ❌ 已弃用 无适配器 (clis 目录为空)

Skills(nanobot 的指导文件)

Skill 用途 调用的工具
xiaohongshu-cli 指导使用 xhs 命令 → 调用 xhs
xiaohongshu-poster 指导生成图文+发布 → 调用 xhs post
xiaohongshu-converter 内容转换 ?
xiaohongshu_integration 集成相关 ?
opencli-integration 指导使用 opencli → 已无用

关键结论

  1. myxhs 是工具,不是 Skill

    • 它只是 /home/ubuntu/.local/bin/myxhs 这个 CLI 命令
    • 还没有对应的 Skill 文件来指导我使用它
  2. 实际上只有 2 个有效的 CLI 工具

    • xhs - 原版,自动从浏览器取 Cookie
    • myxhs - 我开发的,读本地文件 /home/ubuntu/xiaohongshu_cookies.txt
  3. OpenCLI 已废弃

    • .openclaw/ 目录已删(之前清理过)
    • ~/.opencli/clis/ 是空的,没有小红书适配器
    • opencli-integration 这个 Skill 应该删除
  4. GitHub 仓库关系

    • jackwener/xhs-cli 和 jackwener/xiaohongshu-cli 是同一个项目
    • PyPI 包名是 xiaohongshu-cli,安装后是 xhs 命令

建议

要不要我:

  1. 创建一个 my-xiaohongshu-cli 的 Skill 文件,指导我使用 myxhs?
  2. 删除废弃的 opencli-integration Skill?
  3. 或者统一只用 xhs,不再维护 myxhs?