14 KiB
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站适配器
└── ...
工作原理
- Cookie 模式:复用浏览器登录态,直接调用 API
- Browser 模式:通过 CDP 控制真实浏览器,模拟用户操作
- 生成模式:
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 可以保持登录,服务器通过隧道复用。
是的!提供 Cookie 就能生成新适配器
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 的作用
| 模式 | 是否需要 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 | → 已无用 |
关键结论
-
myxhs是工具,不是 Skill- 它只是
/home/ubuntu/.local/bin/myxhs这个 CLI 命令 - 还没有对应的 Skill 文件来指导我使用它
- 它只是
-
实际上只有 2 个有效的 CLI 工具
xhs- 原版,自动从浏览器取 Cookiemyxhs- 我开发的,读本地文件/home/ubuntu/xiaohongshu_cookies.txt
-
OpenCLI 已废弃
.openclaw/目录已删(之前清理过)~/.opencli/clis/是空的,没有小红书适配器opencli-integration这个 Skill 应该删除
-
GitHub 仓库关系
jackwener/xhs-cli和jackwener/xiaohongshu-cli是同一个项目- PyPI 包名是
xiaohongshu-cli,安装后是xhs命令
建议
要不要我:
- 创建一个
my-xiaohongshu-cli的 Skill 文件,指导我使用myxhs? - 删除废弃的
opencli-integrationSkill? - 或者统一只用
xhs,不再维护myxhs?