Angiin

docs: 完善 README — 添加 Skill 安装指南和使用说明

- 新增 ZIP 下载安装方式(推荐),适配 OpenClaw 及所有 SKILL.md 兼容平台
- 新增自然语言使用示例,展示连贯操作能力
- 补全 CLI 命令参考(20 个子命令)
- 更新项目结构和技术架构说明
Showing 1 changed file with 161 additions and 75 deletions
1 # xiaohongshu-skills 1 # xiaohongshu-skills
2 2
3 -小红书自动化 Claude Code Skills,基于 Python CDP 浏览器自动化引擎。 3 +小红书自动化 Skills,基于 Python CDP 浏览器自动化引擎。
4 4
5 -为 OpenClaw 生态提供小红书操作能力,同时兼容 Claude Code Skills 格式 5 +支持 [OpenClaw](https://github.com/anthropics/openclaw) 及所有兼容 `SKILL.md` 格式的 AI Agent 平台(如 Claude Code)
6 6
7 ## 功能概览 7 ## 功能概览
8 8
9 -| 技能 | 说明 | 核心命令 | 9 +| 技能 | 说明 | 核心能力 |
10 |------|------|----------| 10 |------|------|----------|
11 -| **xhs-auth** | 认证管理 | `check-login`, `login`, `delete-cookies` |  
12 -| **xhs-publish** | 内容发布 | `publish`, `publish-video` |  
13 -| **xhs-explore** | 内容发现 | `list-feeds`, `search-feeds`, `get-feed-detail`, `user-profile` |  
14 -| **xhs-interact** | 社交互动 | `post-comment`, `reply-comment`, `like-feed`, `favorite-feed` |  
15 -| **xhs-content-ops** | 复合运营 | 竞品分析、热点追踪、内容创作、互动管理 | 11 +| **xhs-auth** | 认证管理 | 登录检查、扫码登录、多账号切换 |
  12 +| **xhs-publish** | 内容发布 | 图文 / 视频 / 长文发布、定时发布、分步预览 |
  13 +| **xhs-explore** | 内容发现 | 关键词搜索、笔记详情、用户主页、首页推荐 |
  14 +| **xhs-interact** | 社交互动 | 评论、回复、点赞、收藏 |
  15 +| **xhs-content-ops** | 复合运营 | 竞品分析、热点追踪、批量互动、内容创作 |
  16 +
  17 +支持**连贯操作** — 你可以用自然语言下达复合指令,Agent 会自动串联多个技能完成任务。例如:
  18 +
  19 +> "搜索刺客信条最火的图文帖子,收藏它,然后告诉我讲了什么"
  20 +
  21 +Agent 会自动执行:搜索 → 筛选图文 → 按点赞排序 → 收藏 → 获取详情 → 总结内容。
16 22
17 ## 安装 23 ## 安装
18 24
  25 +### 前置条件
  26 +
  27 +- Python >= 3.11
  28 +- [uv](https://docs.astral.sh/uv/) 包管理器
  29 +- Google Chrome 浏览器
  30 +
  31 +### 方法一:下载 ZIP 安装(推荐)
  32 +
  33 +最简单稳妥的方式,适用于 OpenClaw 及所有支持 `SKILL.md` 的 Agent 平台。
  34 +
  35 +1. 在 GitHub 仓库页面点击 **Code → Download ZIP**,下载项目压缩包。
  36 +2. 解压到你的 Agent 的 skills 目录下:
  37 +
  38 +```
  39 +# OpenClaw 示例
  40 +<openclaw-project>/skills/xiaohongshu-skills/
  41 +
  42 +# Claude Code 示例
  43 +<your-project>/.claude/skills/xiaohongshu-skills/
  44 +```
  45 +
  46 +3. 安装 Python 依赖:
  47 +
  48 +```bash
  49 +cd xiaohongshu-skills
  50 +uv sync
  51 +```
  52 +
  53 +安装完成后,Agent 会自动识别 `SKILL.md` 并加载小红书技能。
  54 +
  55 +### 方法二:Git Clone
  56 +
19 ```bash 57 ```bash
  58 +# 进入 skills 目录
  59 +cd <your-agent-project>/skills/
  60 +
20 # 克隆项目 61 # 克隆项目
21 -git clone https://github.com/autoclaw-cc/xiaohongshu-skills.git 62 +git clone https://github.com/anthropics/xiaohongshu-skills.git
22 cd xiaohongshu-skills 63 cd xiaohongshu-skills
23 64
24 -# 安装依赖(需要 uv) 65 +# 安装依赖
25 uv sync 66 uv sync
26 ``` 67 ```
27 68
28 -### 前置条件 69 +> 其他支持 SKILL.md 格式的 Agent 框架安装方式类似 — 将本项目放入其 skills 目录即可。
29 70
30 -- Python >= 3.11  
31 -- [uv](https://docs.astral.sh/uv/) 包管理器  
32 -- Google Chrome 浏览器 71 +## 使用方式
33 72
34 -## 快速开始 73 +### 作为 AI Agent 技能使用(推荐)
35 74
36 -### 1. 启动 Chrome 75 +安装到 skills 目录后,直接用自然语言与 Agent 对话即可。Agent 会根据你的意图自动路由到对应技能。
  76 +
  77 +**认证登录:**
  78 +> "登录小红书" / "检查登录状态"
  79 +
  80 +**搜索浏览:**
  81 +> "搜索关于露营的笔记" / "查看这条笔记的详情"
  82 +
  83 +**发布内容:**
  84 +> "帮我发一条图文笔记,标题是…,配图是…"
  85 +
  86 +**社交互动:**
  87 +> "给这条笔记点赞" / "收藏这条帖子" / "评论:写得太好了"
  88 +
  89 +**复合操作:**
  90 +> "搜索竞品账号最近的爆款笔记,分析他们的选题方向"
  91 +
  92 +### 作为 CLI 工具使用
  93 +
  94 +所有功能也可以通过命令行直接调用,输出 JSON 格式,便于脚本集成。
  95 +
  96 +#### 1. 启动 Chrome
37 97
38 ```bash 98 ```bash
39 -# 有窗口模式(推荐首次登录 99 +# 有窗口模式(首次登录必须
40 python scripts/chrome_launcher.py 100 python scripts/chrome_launcher.py
41 101
42 # 无头模式 102 # 无头模式
43 python scripts/chrome_launcher.py --headless 103 python scripts/chrome_launcher.py --headless
44 ``` 104 ```
45 105
46 -### 2. 登录小红书 106 +#### 2. 登录
47 107
48 ```bash 108 ```bash
49 -# 检查登录状态 109 +# 检查登录状态(已登录时返回用户昵称和小红书号)
50 python scripts/cli.py check-login 110 python scripts/cli.py check-login
51 111
52 -# 登录(扫码) 112 +# 扫码登录
53 python scripts/cli.py login 113 python scripts/cli.py login
54 ``` 114 ```
55 115
56 -### 3. 搜索笔记 116 +#### 3. 搜索笔记
57 117
58 ```bash 118 ```bash
59 python scripts/cli.py search-feeds --keyword "关键词" 119 python scripts/cli.py search-feeds --keyword "关键词"
60 120
61 -# 带筛选 121 +# 带筛选条件
62 python scripts/cli.py search-feeds \ 122 python scripts/cli.py search-feeds \
63 - --keyword "关键词" --sort-by 最新 --note-type 图文 123 + --keyword "关键词" \
  124 + --sort-by "最多点赞" \
  125 + --note-type "图文"
64 ``` 126 ```
65 127
66 -### 4. 查看笔记详情 128 +#### 4. 查看笔记详情
67 129
68 ```bash 130 ```bash
69 python scripts/cli.py get-feed-detail \ 131 python scripts/cli.py get-feed-detail \
70 --feed-id FEED_ID --xsec-token XSEC_TOKEN 132 --feed-id FEED_ID --xsec-token XSEC_TOKEN
71 ``` 133 ```
72 134
73 -### 5. 发布内容 135 +#### 5. 发布内容
74 136
75 ```bash 137 ```bash
76 -# 图文发布  
77 -python scripts/cli.py publish \ 138 +# 图文发布(分步:填写 → 预览 → 确认发布)
  139 +python scripts/cli.py fill-publish \
78 --title-file title.txt \ 140 --title-file title.txt \
79 --content-file content.txt \ 141 --content-file content.txt \
80 --images "/abs/path/pic1.jpg" "/abs/path/pic2.jpg" 142 --images "/abs/path/pic1.jpg" "/abs/path/pic2.jpg"
81 143
  144 +# 用户在浏览器中预览确认后
  145 +python scripts/cli.py click-publish
  146 +
  147 +# 或保存为草稿
  148 +python scripts/cli.py save-draft
  149 +
82 # 视频发布 150 # 视频发布
83 python scripts/cli.py publish-video \ 151 python scripts/cli.py publish-video \
84 --title-file title.txt \ 152 --title-file title.txt \
85 --content-file content.txt \ 153 --content-file content.txt \
86 --video "/abs/path/video.mp4" 154 --video "/abs/path/video.mp4"
  155 +
  156 +# 长文发布
  157 +python scripts/cli.py long-article \
  158 + --title-file title.txt \
  159 + --content-file content.txt
87 ``` 160 ```
88 161
89 -### 6. 社交互动 162 +#### 6. 社交互动
90 163
91 ```bash 164 ```bash
92 -# 发表评论 165 +# 评论
93 python scripts/cli.py post-comment \ 166 python scripts/cli.py post-comment \
94 - --feed-id FEED_ID \  
95 - --xsec-token XSEC_TOKEN \ 167 + --feed-id FEED_ID --xsec-token XSEC_TOKEN \
96 --content "评论内容" 168 --content "评论内容"
97 169
98 # 点赞 170 # 点赞
@@ -106,8 +178,6 @@ python scripts/cli.py favorite-feed \ @@ -106,8 +178,6 @@ python scripts/cli.py favorite-feed \
106 178
107 ## CLI 命令参考 179 ## CLI 命令参考
108 180
109 -所有命令通过 `scripts/cli.py` 统一入口调用,输出 JSON 格式。  
110 -  
111 全局选项: 181 全局选项:
112 - `--host HOST` — Chrome 调试主机(默认 127.0.0.1) 182 - `--host HOST` — Chrome 调试主机(默认 127.0.0.1)
113 - `--port PORT` — Chrome 调试端口(默认 9222) 183 - `--port PORT` — Chrome 调试端口(默认 9222)
@@ -115,59 +185,67 @@ python scripts/cli.py favorite-feed \ @@ -115,59 +185,67 @@ python scripts/cli.py favorite-feed \
115 185
116 | 子命令 | 说明 | 186 | 子命令 | 说明 |
117 |--------|------| 187 |--------|------|
118 -| `check-login` | 检查登录状态 |  
119 -| `login` | 获取登录二维码,等待扫码 |  
120 -| `delete-cookies` | 清除 cookies | 188 +| `check-login` | 检查登录状态,返回用户昵称和小红书号 |
  189 +| `login` | 获取登录二维码,等待扫码,登录后返回用户信息 |
  190 +| `delete-cookies` | 清除 cookies(退出/切换账号) |
121 | `list-feeds` | 获取首页推荐 Feed | 191 | `list-feeds` | 获取首页推荐 Feed |
122 -| `search-feeds` | 关键词搜索笔记 |  
123 -| `get-feed-detail` | 获取笔记详情和评论 |  
124 -| `user-profile` | 获取用户主页信息 | 192 +| `search-feeds` | 关键词搜索笔记(支持排序/类型/时间/范围/位置筛选) |
  193 +| `get-feed-detail` | 获取笔记完整内容和评论 |
  194 +| `user-profile` | 获取用户主页信息和帖子列表 |
125 | `post-comment` | 对笔记发表评论 | 195 | `post-comment` | 对笔记发表评论 |
126 | `reply-comment` | 回复指定评论 | 196 | `reply-comment` | 回复指定评论 |
127 | `like-feed` | 点赞 / 取消点赞 | 197 | `like-feed` | 点赞 / 取消点赞 |
128 | `favorite-feed` | 收藏 / 取消收藏 | 198 | `favorite-feed` | 收藏 / 取消收藏 |
129 -| `publish` | 发布图文内容 |  
130 -| `publish-video` | 发布视频内容 |  
131 -  
132 -退出码:0=成功,1=未登录,2=错误 199 +| `publish` | 一步发布图文 |
  200 +| `publish-video` | 一步发布视频 |
  201 +| `fill-publish` | 填写图文表单(不发布,供预览) |
  202 +| `fill-publish-video` | 填写视频表单(不发布,供预览) |
  203 +| `click-publish` | 确认发布(点击发布按钮) |
  204 +| `save-draft` | 保存为草稿 |
  205 +| `long-article` | 长文模式:填写 + 一键排版 |
  206 +| `select-template` | 选择长文排版模板 |
  207 +| `next-step` | 长文下一步 + 填写描述 |
  208 +
  209 +退出码:`0` 成功 · `1` 未登录 · `2` 错误
133 210
134 ## 项目结构 211 ## 项目结构
135 212
136 ``` 213 ```
137 xiaohongshu-skills/ 214 xiaohongshu-skills/
138 ├── scripts/ # Python CDP 自动化引擎 215 ├── scripts/ # Python CDP 自动化引擎
139 -│ ├── xhs/ # 核心自动化包(模块化) 216 +│ ├── xhs/ # 核心自动化包
140 │ │ ├── cdp.py # CDP WebSocket 客户端 217 │ │ ├── cdp.py # CDP WebSocket 客户端
141 │ │ ├── stealth.py # 反检测保护 218 │ │ ├── stealth.py # 反检测保护
142 -│ │ ├── cookies.py # Cookie 持久化  
143 -│ │ ├── types.py # 数据类型  
144 -│ │ ├── errors.py # 异常体系  
145 -│ │ ├── selectors.py # CSS 选择器  
146 -│ │ ├── urls.py # URL 常量  
147 -│ │ ├── human.py # 人类行为模拟  
148 -│ │ ├── login.py # 登录 219 +│ │ ├── selectors.py # CSS 选择器(集中管理,改版时只改此文件)
  220 +│ │ ├── login.py # 登录 + 用户信息获取
149 │ │ ├── feeds.py # 首页 Feed 221 │ │ ├── feeds.py # 首页 Feed
150 -│ │ ├── search.py # 搜索  
151 -│ │ ├── feed_detail.py # 笔记详情 222 +│ │ ├── search.py # 搜索 + 筛选
  223 +│ │ ├── feed_detail.py # 笔记详情 + 评论加载
152 │ │ ├── user_profile.py # 用户主页 224 │ │ ├── user_profile.py # 用户主页
153 -│ │ ├── comment.py # 评论  
154 -│ │ ├── like_favorite.py # 点赞/收藏 225 +│ │ ├── comment.py # 评论、回复
  226 +│ │ ├── like_favorite.py # 点赞、收藏
155 │ │ ├── publish.py # 图文发布 227 │ │ ├── publish.py # 图文发布
156 -│ │ └── publish_video.py # 视频发布  
157 -│ ├── cli.py # 统一 CLI(13 个子命令) 228 +│ │ ├── publish_video.py # 视频发布
  229 +│ │ ├── publish_long_article.py # 长文发布
  230 +│ │ ├── types.py # 数据类型
  231 +│ │ ├── errors.py # 异常体系
  232 +│ │ ├── urls.py # URL 常量
  233 +│ │ ├── cookies.py # Cookie 持久化
  234 +│ │ └── human.py # 人类行为模拟
  235 +│ ├── cli.py # 统一 CLI 入口(20 个子命令)
158 │ ├── chrome_launcher.py # Chrome 进程管理 236 │ ├── chrome_launcher.py # Chrome 进程管理
159 │ ├── account_manager.py # 多账号管理 237 │ ├── account_manager.py # 多账号管理
160 -│ ├── image_downloader.py # 媒体下载  
161 -│ ├── title_utils.py # 标题长度计算 238 +│ ├── image_downloader.py # 媒体下载(SHA256 缓存)
  239 +│ ├── title_utils.py # UTF-16 标题长度计算
162 │ ├── run_lock.py # 单实例锁 240 │ ├── run_lock.py # 单实例锁
163 │ └── publish_pipeline.py # 发布编排器 241 │ └── publish_pipeline.py # 发布编排器
164 ├── skills/ # Claude Code Skills 定义 242 ├── skills/ # Claude Code Skills 定义
165 -│ ├── xhs-auth/SKILL.md # 认证管理  
166 -│ ├── xhs-publish/SKILL.md # 内容发布  
167 -│ ├── xhs-explore/SKILL.md # 内容发现  
168 -│ ├── xhs-interact/SKILL.md # 社交互动  
169 -│ └── xhs-content-ops/SKILL.md # 复合运营  
170 -├── SKILL.md # 统一入口 243 +│ ├── xhs-auth/SKILL.md
  244 +│ ├── xhs-publish/SKILL.md
  245 +│ ├── xhs-explore/SKILL.md
  246 +│ ├── xhs-interact/SKILL.md
  247 +│ └── xhs-content-ops/SKILL.md
  248 +├── SKILL.md # 技能统一入口(路由到子技能)
171 ├── CLAUDE.md # 项目开发指南 249 ├── CLAUDE.md # 项目开发指南
172 ├── pyproject.toml # uv 项目配置 250 ├── pyproject.toml # uv 项目配置
173 └── README.md 251 └── README.md
@@ -175,18 +253,22 @@ xiaohongshu-skills/ @@ -175,18 +253,22 @@ xiaohongshu-skills/
175 253
176 ## 技术架构 254 ## 技术架构
177 255
178 -### 双层结构 256 +### 双层设计
179 257
180 -1. **scripts/ — Python CDP 引擎**  
181 - - 基于 xiaohongshu-mcp Go 源码从零重写  
182 - - 通过 Chrome DevTools Protocol (CDP) 直接控制浏览器  
183 - - 数据提取使用 `window.__INITIAL_STATE__` 模式  
184 - - 内置反检测保护(stealth flags + JS 注入)  
185 - - JSON 结构化输出 258 +```
  259 +用户 ──→ AI Agent ──→ SKILL.md(意图路由)──→ CLI ──→ CDP 引擎 ──→ Chrome ──→ 小红书
  260 +```
  261 +
  262 +1. **Skills 层**`skills/` + `SKILL.md`)— AI Agent 的能力定义,描述何时触发、如何调用、如何处理失败。Agent 读取 SKILL.md 后自动获得小红书操作能力。
  263 +
  264 +2. **引擎层**`scripts/`)— Python CDP 自动化引擎,通过 Chrome DevTools Protocol 直接控制浏览器。内置反检测保护、人类行为模拟、JSON 结构化输出。
186 265
187 -2. **skills/ — Claude Code Skills 定义**  
188 - - SKILL.md 格式,指导 AI agent 如何调用 scripts/  
189 - - 包含输入判断、约束规则、工作流程、失败处理 266 +### 关键设计
  267 +
  268 +- **数据提取**:通过 `window.__INITIAL_STATE__` 读取页面数据,与小红书前端框架对齐
  269 +- **反检测**:Stealth JS 注入 + CDP 真实输入事件(`isTrusted=true`)+ 随机延迟
  270 +- **选择器集中管理**:所有 CSS 选择器在 `xhs/selectors.py` 统一维护,小红书改版时只需改一个文件
  271 +- **分步发布**:fill → 预览 → confirm 三步流程,确保用户始终掌控发布内容
190 272
191 ## 开发 273 ## 开发
192 274
@@ -196,3 +278,7 @@ uv run ruff check . # Lint 检查 @@ -196,3 +278,7 @@ uv run ruff check . # Lint 检查
196 uv run ruff format . # 代码格式化 278 uv run ruff format . # 代码格式化
197 uv run pytest # 运行测试 279 uv run pytest # 运行测试
198 ``` 280 ```
  281 +
  282 +## License
  283 +
  284 +MIT