Skip to content
EN

Back to the catalog

redbookskills

white0dew/xiaohongshuskills · skills.sh

Open source Repository Open in the app JSON README (API)

About

Skill publicada por white0dew/xiaohongshuskills no skills.sh. Instale com: npx skills add white0dew/xiaohongshuskills@redbookskills

Details

Kind
Agent skills
Publisher
white0dew
Origin
skillssh
Category
ferramentas
Stars
3,479
Forks
342
Open pull requests
1
Last push
2026-10-05T09:03:34Z
Repository state
ativo
Language
Python
License
MIT
Added
2026-10-06 04:47:57
Updated
2026-10-06 04:47:57
Origin id
white0dew/xiaohongshuskills/redbookskills

README

# RedBookSkills

## 赞助商

**Code中转站**:<https://code.aistar.cool>
- 1:1 美元充值
- 已稳定运行半年
- 支持Codex、Claude

说明:中转信息仅作经验交流,请自行判断是否适合自己的使用场景。

自动发布内容到小红书(Xiaohongshu/RED)的命令行工具,也支持仅启动测试浏览器(不发布)。
通过 Chrome DevTools Protocol (CDP) 实现自动化发布,支持图文发布、视频发布、多账号管理、无头模式运行、自动搜索素材与内容数据抓取等功能。

## 风险提示(重要)

**使用本项目进行小红书自动化,存在被平台风控、限流、封号或封禁账号的风险。**

建议仅先在测试号上验证,控制发布频率和流量规模,并对最终发布内容进行人工复核。使用者需自行评估并承担由此带来的账号、内容、流量及其他相关风险。

## 功能特性
- **自动化发布**:自动填写标题、正文,支持上传图片或视频
- **创作者中心兼容修复**:适配 2026 年 2-3 月发布页 DOM 变动(发布按钮、定时开关、日期输入、多图上传等待、正文编辑器)
- **话题标签自动写入**:识别正文最后一行 `#标签`,然后逐渐写入
- **多账号支持**:支持管理多个小红书账号,各账号 Cookie 隔离
- **无头模式**:支持后台运行,无需显示浏览器窗口
- **远程 CDP 支持**:可通过 `--host` / `--port` 连接远程 Chrome 调试端口
- **图片下载**:支持从 URL 自动下载图片,自动添加 Referer 绕过防盗链
- **登录检测**:自动检测登录状态,未登录时自动切换到有窗口模式扫码
- **登录二维码导出**:支持返回登录二维码 Base64 图片,便于远程前端展示扫码
- **登录状态缓存**:`check_login/check_home_login` 默认本地缓存 12 小时,减少重复跳转校验
- **首页推荐流抓取**:支持抓取首页推荐 feed 列表
- **内容检索与详情读取**:支持搜索笔记并获取指定笔记详情(含评论数据),详情可选滚动加载更多评论/回复
- **笔记评论**:支持按 `feed_id + xsec_token` 对指定笔记发表一级评论
- **评论回复**:支持按评论定位条件(评论 ID / 作者 / 文本片段)回复指定评论
- **互动动作控制**:支持对指定笔记执行点赞/取消点赞、收藏/取消收藏
- **用户页信息提取**:支持抓取用户主页快照与主页笔记列表
- **通知评论抓取**:支持在 `/notification` 页面抓取 `you/mentions` 接口返回
- **内容数据看板抓取**:支持抓取“笔记基础信息”表(曝光/观看/点赞等)并导出 CSV

## 安装

### 环境要求

- Python 3.10+
- Google Chrome 浏览器
- Windows 操作系统(目前仅测试 Windows)

### 安装依赖

```bash
pip install -r requirements.txt
```

## 快速开始

### 1. 首次登录

```bash
python scripts/cdp_publish.py login
```

在弹出的 Chrome 窗口中扫码登录小红书。

说明:当前发布链路已按 2026 年 2-3 月的小红书创作者中心改版调整过选择器与等待策略;如果后续再次改版,优先检查 `scripts/cdp_publish.py` 中的 `SELECTORS`、多图上传等待和发布按钮点击逻辑。

### 2. 启动/测试浏览器(不发布)

```bash
# 启动测试浏览器(有窗口,推荐)
python scripts/chrome_launcher.py

# 无头启动测试浏览器
python scripts/chrome_launcher.py --headless

# 检查当前登录状态
python scripts/cdp_publish.py check-login

# 获取登录二维码(返回 Base64,可供远程前端直接展示)
python scripts/cdp_publish.py get-login-qrcode

# 可选:优先复用已有标签页(减少有窗口模式下切到前台)
python scripts/cdp_publish.py check-login --reuse-existing-tab

# 连接远程 CDP(Chrome 在另一台机器)
python scripts/cdp_publish.py --host 10.0.0.12 --port 9222 check-login

# 重启测试浏览器
python scripts/chrome_launcher.py --restart

# 关闭测试浏览器
python scripts/chrome_launcher.py --kill
```

### 3. 发布内容

```bash
# 无头模式(推荐,默认自动发布)
python scripts/publish_pipeline.py --headless \
    --title "文章标题" \
    --content "文章正文" \
    --image-urls "https://example.com/image.jpg"

# 有窗口预览模式(仅填充,不自动点发布)
python scripts/publish_pipeline.py \
    --preview \
    --title "文章标题" \
    --content "文章正文" \
    --image-urls "https://example.com/image.jpg"

# 可选:优先复用已有标签页(减少有窗口模式下切到前台)
python scripts/publish_pipeline.py --reuse-existing-tab \
    --title "文章标题" \
    --content "文章正文" \
    --image-urls "https://example.com/image.jpg"

# 连接远程 CDP 并发布(远程 Chrome 需已开启调试端口)
python scripts/publish_pipeline.py --host 10.0.0.12 --port 9222 \
    --title "文章标题" \
    --content "文章正文" \
    --image-urls "https://example.com/image.jpg"

# 从文件读取内容
python scripts/publish_pipeline.py --headless \
    --title-file title.txt \
    --content-file content.txt \
    --image-urls "https://example.com/image.jpg"

# 正文最后一行可放话题标签(最多 10 个)
# 例如 content.txt 最后一行:
# #春招 #26届 #校招 #求职 #找工作

# 使用本地图片
python scripts/publish_pipeline.py --headless \
    --title "文章标题" \
    --content "文章正文" \
    --images "C:\path\to\image.jpg"

# 使用本地视频
python scripts/publish_pipeline.py --headless \
    --title "视频标题" \
    --content "视频正文" \
    --video "C:\path\to\video.mp4"

# 使用视频 URL
python scripts/publish_pipeline.py --headless \
    --title "视频标题" \
    --content "视频正文" \
    --video-url "https://example.com/video.mp4"

# WSL/远程 CDP + Windows/UNC 路径可跳过本地文件预校验
python scripts/publish_pipeline.py --headless \
    --title "文章标题" \
    --content "文章正文" \
    --images "\\wsl.localhost\Ubuntu\home\user\image.jpg" \
    --skip-file-check

```

### 4. 多账号管理

```bash
# 列出所有账号
python scripts/cdp_publish.py list-accounts

# 添加新账号
python scripts/cdp_publish.py add-account myaccount --alias "我的账号"

# 登录指定账号
python scripts/cdp_publish.py --account myaccount login

# 使用指定账号发布
python scripts/publish_pipeline.py --account myaccount --headless \
    --title "标题" --content "正文" --image-urls "URL"

# 设置默认账号
python scripts/cdp_publish.py set-default-account myaccount

# 切换账号(清除当前登录,重新扫码)
python scripts/cdp_publish.py switch-account
```

### 5. 搜索内容、查看笔记详情与互动操作

```bash
# 首页推荐列表
python scripts/cdp_publish.py list-feeds

# 搜索笔记(可选筛选)
python scripts/cdp_publish.py search-feeds --keyword "春招"
python scripts/cdp_publish.py search-feeds --keyword "春招" --sort-by 最新 --note-type 图文

# 获取笔记详情(feed_id 与 xsec_token 可从搜索结果中获取)
python scripts/cdp_publish.py get-feed-detail \
    --feed-id 67abc1234def567890123456 \
    --xsec-token YOUR_XSEC_TOKEN

# 可选:滚动加载更多一级评论,并尝试展开二级回复
python scripts/cdp_publish.py get-feed-detail \
    --feed-id 67abc1234def567890123456 \
    --xsec-token YOUR_XSEC_TOKEN \
    --load-all-comments \
    --limit 20 \
    --click-more-replies \
    --reply-limit 10 \
    --scroll-speed normal

# 给笔记发表评论(一级评论)
python scripts/cdp_publish.py post-comment-to-feed \
    --feed-id 67abc1234def567890123456 \
    --xsec-token YOUR_XSEC_TOKEN \
    --content "写得很实用,感谢分享!"

# 回复指定评论(可按评论ID / 作者 / 文本片段定位)
python scripts/cdp_publish.py respond-comment \
    --feed-id 67abc1234def567890123456 \
    --xsec-token YOUR_XSEC_TOKEN \
    --comment-id COMMENT_ID \
    --content "感谢你的反馈~"

# 点赞 / 取消点赞
python scripts/cdp_publish.py note-upvote --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN
python scripts/cdp_publish.py note-unvote --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN

# 收藏 / 取消收藏
python scripts/cdp_publish.py note-bookmark --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN
python scripts/cdp_publish.py note-unbookmark --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN

# 用户主页快照 / 用户主页笔记列表
python scripts/cdp_publish.py profile-snapshot --user-id USER_ID
python scripts/cdp_publish.py notes-from-profile --user-id USER_ID --limit 20 --max-scrolls 3

# 抓取“评论和@”通知接口(you/mentions)
python scripts/cdp_publish.py get-notification-mentions
```

说明:`list-feeds` 返回首页推荐 feed 列表;`search-feeds` 会先在搜索框输入关键词,抓取下拉推荐词(`recommended_keywords`),再回车拉取 feed 列表。
说明:`search-feeds` 当前返回的是页面上可提取到的结果集合;如果调用方只需要前 N 条,可以自行截断结果。当前没有单独的 `--limit` 参数用于控制搜索结果条数。
说明:`get-feed-detail --load-all-comments` 会在详情页滚动评论区,并可选点击“更多回复”后再提取 `window.__INITIAL_STATE__`。

### 6. 获取内容数据表(content_data)

```bash
# 抓取“笔记基础信息”数据表
python scripts/cdp_publish.py content-data

# 下划线别名
python scripts/cdp_publish.py content_data

# 导出 CSV
python scripts/cdp_publish.py content-data --csv-file "/abs/path/content_data.csv"
```

## 命令参考

### 话题标签(publish_pipeline.py)

- 从正文中提取规则:若“最后一个非空行”全部由 `#标签` 组成,则提取为话题标签并从正文移除。
- 标签输入策略:逐个输入 `#标签`,等待 `3` 秒,再发送 `Enter` 进行确认。
- 建议数量:`1-10` 个标签;超过平台限制时请手动精简。
- 示例(正文最后一行):`#春招 #26届 #校招 #春招规划 #面试`

### publish_pipeline.py

统一发布入口,一条命令完成全部流程。

```bash
python scripts/publish_pipeline.py [选项]

选项:
  --title TEXT           文章标题
  --title-file FILE      从文件读取标题
  --content TEXT         文章正文
  --content-file FILE    从文件读取正文
  --image-urls URL...    图片 URL 列表
  --images FILE...       本地图片文件列表
  --video FILE           本地视频文件
  --video-url URL        视频 URL(先下载再上传)
  --skip-file-check      跳过本地媒体文件存在性检查(WSL/远程 CDP/UNC 路径可用)
  --preserve-upload-paths 强制保留原始上传路径,不将反斜杠转换为正斜杠
  --host HOST            CDP 主机地址(默认 127.0.0.1)
  --port PORT            CDP 端口(默认 9222)
  --headless             无头模式(无浏览器窗口)
  --reuse-existing-tab   优先复用已有标签页(默认关闭)
  --account NAME         指定账号
  --auto-publish         兼容参数:默认已自动发布(可省略)
  --preview              预览模式:仅填充内容,不点击发布
```

说明:启用 `--reuse-existing-tab` 后,发布流程仍会自动导航到发布页,因此会刷新到目标页面再继续执行。
说明:当 `--host` 非 `127.0.0.1/localhost` 时为远程模式,会跳过本地 `chrome_launcher.py` 的自动启动/重启逻辑,请确保远程 CDP 地址可达。
说明:当控制端运行在 WSL、但媒体路径使用 Windows/UNC(如 `\\wsl.localhost\...`)时,可加 `--skip-file-check` 跳过 Linux 侧 `isfile` 预校验。
说明:脚本现在会自动识别 `C:\...`、`\\wsl.localhost\...` 等 Windows/UNC 路径,并在传给 `DOM.setFileInputFiles` 时保留原始形态。
说明:若仍想强制关闭路径改写,可显式加 `--preserve-upload-paths`。
说明:`publish_pipeline.py` 默认会自动点击发布;如需人工确认,请显式加 `--preview`。

### cdp_publish.py

底层发布控制,支持分步操作。

```bash
# 检查登录状态
python scripts/cdp_publish.py check-login
python scripts/cdp_publish.py check-login --reuse-existing-tab
python scripts/cdp_publish.py --host 10.0.0.12 --port 9222 check-login

# 填写表单(不发布)
python scripts/cdp_publish.py fill --title "标题" --content "正文" --images img.jpg
python scripts/cdp_publish.py fill --title "标题" --content "正文" --images img.jpg --reuse-existing-tab
python scripts/cdp_publish.py --host 10.0.0.12 --port 9222 fill --title "标题" --content "正文" --images img.jpg

# 点击发布按钮
python scripts/cdp_publish.py click-publish

# 获取登录二维码(支持下划线别名:get_login_qrcode)
python scripts/cdp_publish.py get-login-qrcode

# 首页推荐列表(支持下划线别名:list_feeds)
python scripts/cdp_publish.py list-feeds

# 搜索笔记(支持下划线别名:search_feeds)
python scripts/cdp_publish.py search-feeds --keyword "春招"
python scripts/cdp_publish.py search-feeds --keyword "春招" --sort-by 最新 --note-type 图文

# 获取笔记详情(支持下划线别名:get_feed_detail)
python scripts/cdp_publish.py get-feed-detail --feed-id FEED_ID --xsec-token XSEC_TOKEN
python scripts/cdp_publish.py get-feed-detail --feed-id FEED_ID --xsec-token XSEC_TOKEN --load-all-comments --limit 20 --click-more-replies --reply-limit 10 --scroll-speed normal

# 发表评论(支持下划线别名:post_comment_to_feed)
python scripts/cdp_publish.py post-comment-to-feed --feed-id FEED_ID --xsec-token XSEC_TOKEN --content "评论内容"

# 回复评论(支持下划线别名:respond_comment)
python scripts/cdp_publish.py respond-comment --feed-id FEED_ID --xsec-token XSEC_TOKEN --content "回复内容" [--comment-id COMMENT_ID]

# 点赞/取消点赞(支持下划线别名:note_upvote / note_unvote)
python scripts/cdp_publish.py note-upvote --feed-id FEED_ID --xsec-token XSEC_TOKEN
python scripts/cdp_publish.py note-unvote --feed-id FEED_ID --xsec-token XSEC_TOKEN

# 收藏/取消收藏(支持下划线别名:note_bookmark / note_unbookmark)
python scripts/cdp_publish.py note-bookmark --feed-id FEED_ID --xsec-token XSEC_TOKEN
python scripts/cdp_publish.py note-unbookmark --feed-id FEED_ID --xsec-token XSEC_TOKEN

# 用户主页快照/主页笔记(支持下划线别名:profile_snapshot / notes_from_profile)
python scripts/cdp_publish.py profile-snapshot --profile-url "https://www.xiaohongshu.com/user/profile/USER_ID"
python scripts/cdp_publish.py notes-from-profile --user-id USER_ID --limit 20 --max-scrolls 3

# 抓取通知评论接口(支持下划线别名:get_notification_mentions)
python scripts/cdp_publish.py get-notification-mentions

# 获取内容数据表(支持下划线别名:content_data)
python scripts/cdp_publish.py content-data
python scripts/cdp_publish.py content-data --csv-file "/abs/path/content_data.csv"

# 账号管理
python scripts/cdp_publish.py login
python scripts/cdp_publish.py list-accounts
python scripts/cdp_publish.py add-account NAME [--alias ALIAS]
python scripts/cdp_publish.py remove-account NAME [--delete-profile]
python scripts/cdp_publish.py set-default-account NAME
python scripts/cdp_publish.py switch-account
```

说明:`list-feeds`、`search-feeds`、`get-feed-detail`、`post-comment-to-feed`、`respond-comment`、`note-upvote`、`note-unvote`、`note-bookmark`、`note-unbookmark`、`profile-snapshot`、`notes-from-profile` 与 `get-notification-mentions` 会校验 `xiaohongshu.com` 主页登录态(非创作者中心登录态)。
说明:登录态检查默认启用本地缓存(12 小时,仅缓存“已登录”结果),到期后自动重新走网页校验。
说明:`get-login-qrcode` 返回 `qrcode_base64` / `qrcode_data_url`,便于远程前端直接展示扫码。
说明:`search-feeds` 输出新增 `recommended_keywords_count` 与 `recommended_keywords` 字段,表示输入关键词后回车前的下拉推荐词。
说明:`search-feeds` 返回当前页面可提取到的结果,不提供单独的 `--limit` 条数控制;若只需前 N 条,请在调用方截断返回列表。
说明:`get-feed-detail --load-all-comments` 额外返回 `comment_loading`,用于说明评论滚动加载结果。
说明:`content-data` 会校验创作者中心登录态,并抓取 `statistics/data-analysis` 页面中的笔记基础信息表。

### chrome_launcher.py

Chrome 浏览器管理。

```bash
# 启动 Chrome
python scripts/chrome_launcher.py
python scripts/chrome_launcher.py --headless

# 重启 Chrome
python scripts/chrome_launcher.py --restart

# 关闭 Chrome
python scripts/chrome_launcher.py --kill
```

## 支持各种 Skill 工具

本项目可作为 Claude Code、OpenCode 等支持 Skill 的工具使用,只需将项目复制到 `.claude/skills/post-to-xhs/` 目录,并添加 `SKILL.md` 文件即可。

详见 [docs/claude-code-integration.md](https://github.com/white0dew/xiaohongshuskills/blob/HEAD/docs/claude-code-integration.md)

## 注意事项

1. **仅供学习研究**:请遵守小红书平台规则,不要用于违规内容发布
2. **登录安全**:Cookie 存储在本地 Chrome Profile 中,请勿泄露
3. **选择器更新**:如果小红书页面结构变化导致发布失败,需要更新 `cdp_publish.py` 中的选择器
4. feed 的图片类型
- WB_PRV:预览图(preview),通常更轻、更快,适合列表卡片。
  - WB_DFT:默认图(default),通常用于详情展示,质量/尺寸更完整。

## RoadMap
- [x] 支持更多账号管理功能
- [x] 支持发布功能
- [x] 增加后台笔记获取功能
- [x] 支持自动评论
- [x] 支持素材检索功能
- [x] 增加更多错误处理机制


## 许可证

MIT License

## 联系方式

微信号:`whitedewstory`

<img src="https://raw.githubusercontent.com/white0dew/xiaohongshuskills/HEAD/public/whitedew.jpg" alt="微信二维码" width="240" />

### 微信群二维码
微信群:白露的 Ai+知识圈 1
<img src="https://png1.aistar.cool/qr/wechat-group.png" alt="微信群二维码" width="240" />

## Stars
[![Star history](https://raw.githubusercontent.com/white0dew/xiaohongshuskills/HEAD/assets/star-history.svg)](https://github.com/white0dew/XiaohongshuSkills/stargazers)

## 致谢
灵感来自:[Post-to-xhs](https://github.com/Angiin/Post-to-xhs)

More