| name | xiaohongshu-skill |
| description | 小红书 / Xiaohongshu / RedNote AI Agent Skill。用 Python Playwright 搜笔记、读详情、抓推荐流、发图文/视频/长文/Markdown、评论点赞收藏、二维码登录、模板、策略和 SOP;默认 JSON 输出,写操作必须用户确认。适合 Claude Code、Codex、OpenClaw、ClawHub、skills.sh、Hermes Agent 和 AgentSkills。用户提到 xiaohongshu、小红书、rednote、RED、小红书搜索、发到小红书、小红书笔记分析、小红书运营、小红书自动化时触发。 |
| user-invokable | true |
| metadata | {"openclaw":{"emoji":"📕","requires":{"bins":["python3","playwright"],"anyBins":["python3","python"]},"os":["win32","linux","darwin"],"install":[{"id":"pip","kind":"node","label":"Install dependencies (pip)","bins":["playwright"]}]}} |
小红书 Skill
用 Python Playwright 驱动浏览器操作小红书。数据从 window.__INITIAL_STATE__(Vue SSR 状态对象)里取。搜索、发布、互动、运营全在这。
写操作安全规则
下面这些命令会真的改动账号数据。跑之前必须让用户确认:
- 发布笔记 -- 先展示标题、正文、图片列表。用户说"发"才发。
- 评论/回复 -- 先展示要发出去的内容。用户说"发"才发。
- 点赞/收藏 -- 先展示目标帖子。用户说"行"才执行。
用 AskUserQuestion 弹确认框。别自己决定。
前置条件
在 {baseDir} 目录装依赖:
cd {baseDir}
pip install -r requirements.txt
playwright install chromium
Linux/WSL 还要跑:
playwright install-deps chromium
快速开始
所有命令从 {baseDir} 目录跑。
1. 登录(第一次必须做)
cd {baseDir}
python -m scripts qrcode --headless=false
python -m scripts check-login
无头环境里二维码存到 {baseDir}/data/qrcode.png。传给别人扫也行。
2. 搜索
cd {baseDir}
python -m scripts search "关键词"
python -m scripts search "美食" --sort-by=最新 --note-type=图文 --limit=10
筛选选项:
--sort-by:综合、最新、最多点赞、最多评论、最多收藏
--note-type:不限、视频、图文
--publish-time:不限、一天内、一周内、半年内
--search-scope:不限、已看过、未看过、已关注
--location:不限、同城、附近
3. 帖子详情
cd {baseDir}
python -m scripts feed <feed_id> <xsec_token>
python -m scripts feed <feed_id> <xsec_token> --load-comments --max-comments=20
4. 用户主页
cd {baseDir}
python -m scripts user <user_id> [xsec_token]
python -m scripts me
5. 评论互动
先确认再发。 跑之前用 AskUserQuestion 把评论内容亮出来让用户确认。
cd {baseDir}
python -m scripts comment <feed_id> <xsec_token> --content="好棒的笔记!"
python -m scripts reply <feed_id> <xsec_token> --comment-id=<comment_id> --reply-user-id=<user_id> --content="感谢分享"
python -m scripts reply-notification --content="谢谢关注" --index=0
6. 点赞 / 收藏
先确认再操作。 用 AskUserQuestion 把目标帖子亮出来让用户确认。
cd {baseDir}
python -m scripts like <feed_id> <xsec_token>
python -m scripts unlike <feed_id> <xsec_token>
python -m scripts collect <feed_id> <xsec_token>
python -m scripts uncollect <feed_id> <xsec_token>
7. 首页推荐流
cd {baseDir}
python -m scripts explore --limit=20
8. 发布笔记
先确认再发。 跑之前用 AskUserQuestion 把标题、正文、图片亮出来让用户确认。
cd {baseDir}
python -m scripts publish --title="标题" --content="正文" --images="img1.jpg,img2.jpg" --tags="旅行,美食"
python -m scripts publish-video --title="标题" --content="描述" --video="video.mp4" --tags="vlog"
python -m scripts publish-md --title="标题" --file=article.md --tags="干货"
python -m scripts publish-md --title="标题" --text="# 正文\n内容..." --width=1080
python -m scripts publish-longform --title="长文标题" --content="长文正文内容..."
python -m scripts publish --title="标题" --content="正文" --images="img.jpg" --schedule-time="2025-03-01 12:00"
9. 写作模板
cd {baseDir}
python -m scripts template --topic="旅行攻略"
python -m scripts template --topic="美食探店" --type=视频
python -m scripts template --topic="学习方法" --type=长文
10. 运营策略
cd {baseDir}
python -m scripts strategy-init --persona="旅行博主" --audience="18-35岁旅行爱好者" --direction="旅行攻略,小众目的地"
python -m scripts strategy-show
python -m scripts strategy-check-limit --limit-type=likes
python -m scripts strategy-check-limit --limit-type=comments
python -m scripts strategy-add-post --date="2025-03-01" --topic="春日出行攻略" --type=图文
11. SOP 编排
cd {baseDir}
python -m scripts sop --type=publish --topic="旅行攻略" --note-type=图文
python -m scripts sop --type=explore --feed-count=10 --like-prob=0.3 --collect-prob=0.1
python -m scripts sop --type=comment --replies='[{"feed_id":"abc","xsec_token":"xyz","content":"好棒"}]'
数据提取路径
| 数据类型 | JavaScript 路径 |
|---|
| 搜索结果 | window.__INITIAL_STATE__.search.feeds |
| 帖子详情 | window.__INITIAL_STATE__.note.noteDetailMap |
| 互动状态 | window.__INITIAL_STATE__.note.noteDetailMap[id].note.interactInfo |
| 用户信息 | window.__INITIAL_STATE__.user.userPageData |
| 用户笔记 | window.__INITIAL_STATE__.user.notes |
| 推荐流 | window.__INITIAL_STATE__.feed.feeds |
Vue Ref 解包: 始终用 .value 或 ._value:
const data = obj.value !== undefined ? obj.value : obj._value;
反爬保护
内置多层防护,尽量避免触发验证码:
- 频率控制:两次导航间自动等 3-6 秒。连续 5 次请求后冷却 10 秒。
- 真人化延迟:点击前等 1-2.5s,点击后冷却 5-12s。每 3 次交互批次冷却 15-30s。
- 真人化发布:标题填写延迟 0.5-1.5s。正文逐字输入,每字 20-60ms。步骤间隔随机。
- 频率检测:自动识别 toast 提示("频繁"、"操作太快"、"稍后再试")。
- 失败重试:评论提交失败自动重试一次(间隔 2-4s)。
- 验证码检测:检测到安全验证重定向时抛出
CaptchaError。
- 每日配额:策略模块追踪每天互动次数,防止超。
触发验证码了怎么办:
- 等几分钟再试。
- 跑
cd {baseDir} && python -m scripts qrcode --headless=false 手动过验证。
- Cookie 失效了就重新扫码登录。
输出格式
所有命令输出 JSON。搜索结果长这样:
{
"id": "abc123",
"xsec_token": "ABxyz...",
"title": "帖子标题",
"type": "normal",
"user": "用户名",
"user_id": "user123",
"liked_count": "1234",
"collected_count": "567",
"comment_count": "89"
}
文件结构
{baseDir}/
├── SKILL.md # 本文件
├── README.md # 项目文档
├── requirements.txt # Python 依赖
├── LICENSE # MIT
├── data/ # 运行时数据(二维码、调试输出)
├── scripts/ # 核心模块
│ ├── __init__.py # 模块导出(v1.3.0)
│ ├── __main__.py # CLI 入口(22+ 子命令)
│ ├── client.py # 浏览器客户端(频率控制 + 验证码检测)
│ ├── login.py # 二维码登录流程
│ ├── search.py # 搜索(多条件筛选)
│ ├── feed.py # 帖子详情提取
│ ├── user.py # 用户主页提取
│ ├── comment.py # 评论(发表/回复/通知页 + 延迟 + 重试)
│ ├── interact.py # 点赞收藏(延迟 + 频率检测 + 批次冷却)
│ ├── explore.py # 推荐流提取
│ ├── publish.py # 发布(图文/视频/Markdown/长文 + 延迟)
│ ├── templates.py # 写作模板引擎
│ ├── strategy.py # 运营策略(配额/日历/定位)
│ ├── selectors.py # 浏览器选择器契约
│ ├── output_contracts.py # CLI JSON 输出契约
│ ├── quality.py # 本地和 CI 质量门
│ └── sop.py # SOP 编排引擎
└── tests/ # 单元测试
├── test_client.py
├── test_cli.py
├── test_search.py
├── test_comment.py
├── test_interact.py
├── test_publish.py
├── test_output_contracts.py
├── test_quality.py
├── test_selectors.py
├── test_templates.py
├── test_strategy.py
└── test_sop.py
跨平台兼容
| 环境 | 无头模式 | 有头(扫码登录) | 备注 |
|---|
| Windows | OK | OK | 主力开发环境 |
| WSL2 (Win11) | OK | 用 WSLg | 需要 playwright install-deps |
| Linux 服务器 | OK | 不适用 | 二维码存图片文件 |
注意
- Cookie 过期:定期会过期。
check-login 返回 false 就重新登录。
- 频率限制:猛抓会出验证码。别关内置频率控制。
- xsec_token:跟会话绑定的。始终用搜索结果里最新的。
- 配额管理:用
strategy-check-limit 查剩余配额,别超过。
- 别滥用:会封号。本工具仅供学习研究用。