[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74117":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},74117,"XiaohongshuSkills","white0dew\u002FXiaohongshuSkills","white0dew","支持小红书自动发布、自动评论、自动检索的 Skill。支持 OpenClaw、Codex、CC 等","",null,"Python",2998,314,14,4,0,25,62,272,75,29.49,"MIT License",false,"main",true,[],"2026-06-12 02:03:22","# RedBookSkills\n\n\n\n自动发布内容到小红书（Xiaohongshu\u002FRED）的命令行工具，也支持仅启动测试浏览器（不发布）。\n通过 Chrome DevTools Protocol (CDP) 实现自动化发布，支持图文发布、视频发布、多账号管理、无头模式运行、自动搜索素材与内容数据抓取等功能。\n\n## 功能特性\n- **自动化发布**：自动填写标题、正文，支持上传图片或视频\n- **创作者中心兼容修复**：适配 2026 年 2-3 月发布页 DOM 变动（发布按钮、定时开关、日期输入、多图上传等待、正文编辑器）\n- **话题标签自动写入**：识别正文最后一行 `#标签`，然后逐渐写入\n- **多账号支持**：支持管理多个小红书账号，各账号 Cookie 隔离\n- **无头模式**：支持后台运行，无需显示浏览器窗口\n- **远程 CDP 支持**：可通过 `--host` \u002F `--port` 连接远程 Chrome 调试端口\n- **图片下载**：支持从 URL 自动下载图片，自动添加 Referer 绕过防盗链\n- **登录检测**：自动检测登录状态，未登录时自动切换到有窗口模式扫码\n- **登录二维码导出**：支持返回登录二维码 Base64 图片，便于远程前端展示扫码\n- **登录状态缓存**：`check_login\u002Fcheck_home_login` 默认本地缓存 12 小时，减少重复跳转校验\n- **首页推荐流抓取**：支持抓取首页推荐 feed 列表\n- **内容检索与详情读取**：支持搜索笔记并获取指定笔记详情（含评论数据），详情可选滚动加载更多评论\u002F回复\n- **笔记评论**：支持按 `feed_id + xsec_token` 对指定笔记发表一级评论\n- **评论回复**：支持按评论定位条件（评论 ID \u002F 作者 \u002F 文本片段）回复指定评论\n- **互动动作控制**：支持对指定笔记执行点赞\u002F取消点赞、收藏\u002F取消收藏\n- **用户页信息提取**：支持抓取用户主页快照与主页笔记列表\n- **通知评论抓取**：支持在 `\u002Fnotification` 页面抓取 `you\u002Fmentions` 接口返回\n- **内容数据看板抓取**：支持抓取“笔记基础信息”表（曝光\u002F观看\u002F点赞等）并导出 CSV\n\n## 安装\n\n### 环境要求\n\n- Python 3.10+\n- Google Chrome 浏览器\n- Windows 操作系统（目前仅测试 Windows）\n\n### 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n## 快速开始\n\n### 1. 首次登录\n\n```bash\npython scripts\u002Fcdp_publish.py login\n```\n\n在弹出的 Chrome 窗口中扫码登录小红书。\n\n说明：当前发布链路已按 2026 年 2-3 月的小红书创作者中心改版调整过选择器与等待策略；如果后续再次改版，优先检查 `scripts\u002Fcdp_publish.py` 中的 `SELECTORS`、多图上传等待和发布按钮点击逻辑。\n\n### 2. 启动\u002F测试浏览器（不发布）\n\n```bash\n# 启动测试浏览器（有窗口，推荐）\npython scripts\u002Fchrome_launcher.py\n\n# 无头启动测试浏览器\npython scripts\u002Fchrome_launcher.py --headless\n\n# 检查当前登录状态\npython scripts\u002Fcdp_publish.py check-login\n\n# 获取登录二维码（返回 Base64，可供远程前端直接展示）\npython scripts\u002Fcdp_publish.py get-login-qrcode\n\n# 可选：优先复用已有标签页（减少有窗口模式下切到前台）\npython scripts\u002Fcdp_publish.py check-login --reuse-existing-tab\n\n# 连接远程 CDP（Chrome 在另一台机器）\npython scripts\u002Fcdp_publish.py --host 10.0.0.12 --port 9222 check-login\n\n# 重启测试浏览器\npython scripts\u002Fchrome_launcher.py --restart\n\n# 关闭测试浏览器\npython scripts\u002Fchrome_launcher.py --kill\n```\n\n### 3. 发布内容\n\n```bash\n# 无头模式（推荐，默认自动发布）\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --image-urls \"https:\u002F\u002Fexample.com\u002Fimage.jpg\"\n\n# 有窗口预览模式（仅填充，不自动点发布）\npython scripts\u002Fpublish_pipeline.py \\\n    --preview \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --image-urls \"https:\u002F\u002Fexample.com\u002Fimage.jpg\"\n\n# 可选：优先复用已有标签页（减少有窗口模式下切到前台）\npython scripts\u002Fpublish_pipeline.py --reuse-existing-tab \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --image-urls \"https:\u002F\u002Fexample.com\u002Fimage.jpg\"\n\n# 连接远程 CDP 并发布（远程 Chrome 需已开启调试端口）\npython scripts\u002Fpublish_pipeline.py --host 10.0.0.12 --port 9222 \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --image-urls \"https:\u002F\u002Fexample.com\u002Fimage.jpg\"\n\n# 从文件读取内容\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title-file title.txt \\\n    --content-file content.txt \\\n    --image-urls \"https:\u002F\u002Fexample.com\u002Fimage.jpg\"\n\n# 正文最后一行可放话题标签（最多 10 个）\n# 例如 content.txt 最后一行：\n# #春招 #26届 #校招 #求职 #找工作\n\n# 使用本地图片\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --images \"C:\\path\\to\\image.jpg\"\n\n# 使用本地视频\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title \"视频标题\" \\\n    --content \"视频正文\" \\\n    --video \"C:\\path\\to\\video.mp4\"\n\n# 使用视频 URL\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title \"视频标题\" \\\n    --content \"视频正文\" \\\n    --video-url \"https:\u002F\u002Fexample.com\u002Fvideo.mp4\"\n\n# WSL\u002F远程 CDP + Windows\u002FUNC 路径可跳过本地文件预校验\npython scripts\u002Fpublish_pipeline.py --headless \\\n    --title \"文章标题\" \\\n    --content \"文章正文\" \\\n    --images \"\\\\wsl.localhost\\Ubuntu\\home\\user\\image.jpg\" \\\n    --skip-file-check\n\n```\n\n### 4. 多账号管理\n\n```bash\n# 列出所有账号\npython scripts\u002Fcdp_publish.py list-accounts\n\n# 添加新账号\npython scripts\u002Fcdp_publish.py add-account myaccount --alias \"我的账号\"\n\n# 登录指定账号\npython scripts\u002Fcdp_publish.py --account myaccount login\n\n# 使用指定账号发布\npython scripts\u002Fpublish_pipeline.py --account myaccount --headless \\\n    --title \"标题\" --content \"正文\" --image-urls \"URL\"\n\n# 设置默认账号\npython scripts\u002Fcdp_publish.py set-default-account myaccount\n\n# 切换账号（清除当前登录，重新扫码）\npython scripts\u002Fcdp_publish.py switch-account\n```\n\n### 5. 搜索内容、查看笔记详情与互动操作\n\n```bash\n# 首页推荐列表\npython scripts\u002Fcdp_publish.py list-feeds\n\n# 搜索笔记（可选筛选）\npython scripts\u002Fcdp_publish.py search-feeds --keyword \"春招\"\npython scripts\u002Fcdp_publish.py search-feeds --keyword \"春招\" --sort-by 最新 --note-type 图文\n\n# 获取笔记详情（feed_id 与 xsec_token 可从搜索结果中获取）\npython scripts\u002Fcdp_publish.py get-feed-detail \\\n    --feed-id 67abc1234def567890123456 \\\n    --xsec-token YOUR_XSEC_TOKEN\n\n# 可选：滚动加载更多一级评论，并尝试展开二级回复\npython scripts\u002Fcdp_publish.py get-feed-detail \\\n    --feed-id 67abc1234def567890123456 \\\n    --xsec-token YOUR_XSEC_TOKEN \\\n    --load-all-comments \\\n    --limit 20 \\\n    --click-more-replies \\\n    --reply-limit 10 \\\n    --scroll-speed normal\n\n# 给笔记发表评论（一级评论）\npython scripts\u002Fcdp_publish.py post-comment-to-feed \\\n    --feed-id 67abc1234def567890123456 \\\n    --xsec-token YOUR_XSEC_TOKEN \\\n    --content \"写得很实用，感谢分享！\"\n\n# 回复指定评论（可按评论ID \u002F 作者 \u002F 文本片段定位）\npython scripts\u002Fcdp_publish.py respond-comment \\\n    --feed-id 67abc1234def567890123456 \\\n    --xsec-token YOUR_XSEC_TOKEN \\\n    --comment-id COMMENT_ID \\\n    --content \"感谢你的反馈～\"\n\n# 点赞 \u002F 取消点赞\npython scripts\u002Fcdp_publish.py note-upvote --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN\npython scripts\u002Fcdp_publish.py note-unvote --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN\n\n# 收藏 \u002F 取消收藏\npython scripts\u002Fcdp_publish.py note-bookmark --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN\npython scripts\u002Fcdp_publish.py note-unbookmark --feed-id 67abc1234def567890123456 --xsec-token YOUR_XSEC_TOKEN\n\n# 用户主页快照 \u002F 用户主页笔记列表\npython scripts\u002Fcdp_publish.py profile-snapshot --user-id USER_ID\npython scripts\u002Fcdp_publish.py notes-from-profile --user-id USER_ID --limit 20 --max-scrolls 3\n\n# 抓取“评论和@”通知接口（you\u002Fmentions）\npython scripts\u002Fcdp_publish.py get-notification-mentions\n```\n\n说明：`list-feeds` 返回首页推荐 feed 列表；`search-feeds` 会先在搜索框输入关键词，抓取下拉推荐词（`recommended_keywords`），再回车拉取 feed 列表。\n说明：`search-feeds` 当前返回的是页面上可提取到的结果集合；如果调用方只需要前 N 条，可以自行截断结果。当前没有单独的 `--limit` 参数用于控制搜索结果条数。\n说明：`get-feed-detail --load-all-comments` 会在详情页滚动评论区，并可选点击“更多回复”后再提取 `window.__INITIAL_STATE__`。\n\n### 6. 获取内容数据表（content_data）\n\n```bash\n# 抓取“笔记基础信息”数据表\npython scripts\u002Fcdp_publish.py content-data\n\n# 下划线别名\npython scripts\u002Fcdp_publish.py content_data\n\n# 导出 CSV\npython scripts\u002Fcdp_publish.py content-data --csv-file \"\u002Fabs\u002Fpath\u002Fcontent_data.csv\"\n```\n\n## 命令参考\n\n### 话题标签（publish_pipeline.py）\n\n- 从正文中提取规则：若“最后一个非空行”全部由 `#标签` 组成，则提取为话题标签并从正文移除。\n- 标签输入策略：逐个输入 `#标签`，等待 `3` 秒，再发送 `Enter` 进行确认。\n- 建议数量：`1-10` 个标签；超过平台限制时请手动精简。\n- 示例（正文最后一行）：`#春招 #26届 #校招 #春招规划 #面试`\n\n### publish_pipeline.py\n\n统一发布入口，一条命令完成全部流程。\n\n```bash\npython scripts\u002Fpublish_pipeline.py [选项]\n\n选项:\n  --title TEXT           文章标题\n  --title-file FILE      从文件读取标题\n  --content TEXT         文章正文\n  --content-file FILE    从文件读取正文\n  --image-urls URL...    图片 URL 列表\n  --images FILE...       本地图片文件列表\n  --video FILE           本地视频文件\n  --video-url URL        视频 URL（先下载再上传）\n  --skip-file-check      跳过本地媒体文件存在性检查（WSL\u002F远程 CDP\u002FUNC 路径可用）\n  --preserve-upload-paths 强制保留原始上传路径，不将反斜杠转换为正斜杠\n  --host HOST            CDP 主机地址（默认 127.0.0.1）\n  --port PORT            CDP 端口（默认 9222）\n  --headless             无头模式（无浏览器窗口）\n  --reuse-existing-tab   优先复用已有标签页（默认关闭）\n  --account NAME         指定账号\n  --auto-publish         兼容参数：默认已自动发布（可省略）\n  --preview              预览模式：仅填充内容，不点击发布\n```\n\n说明：启用 `--reuse-existing-tab` 后，发布流程仍会自动导航到发布页，因此会刷新到目标页面再继续执行。\n说明：当 `--host` 非 `127.0.0.1\u002Flocalhost` 时为远程模式，会跳过本地 `chrome_launcher.py` 的自动启动\u002F重启逻辑，请确保远程 CDP 地址可达。\n说明：当控制端运行在 WSL、但媒体路径使用 Windows\u002FUNC（如 `\\\\wsl.localhost\\...`）时，可加 `--skip-file-check` 跳过 Linux 侧 `isfile` 预校验。\n说明：脚本现在会自动识别 `C:\\...`、`\\\\wsl.localhost\\...` 等 Windows\u002FUNC 路径，并在传给 `DOM.setFileInputFiles` 时保留原始形态。\n说明：若仍想强制关闭路径改写，可显式加 `--preserve-upload-paths`。\n说明：`publish_pipeline.py` 默认会自动点击发布；如需人工确认，请显式加 `--preview`。\n\n### cdp_publish.py\n\n底层发布控制，支持分步操作。\n\n```bash\n# 检查登录状态\npython scripts\u002Fcdp_publish.py check-login\npython scripts\u002Fcdp_publish.py check-login --reuse-existing-tab\npython scripts\u002Fcdp_publish.py --host 10.0.0.12 --port 9222 check-login\n\n# 填写表单（不发布）\npython scripts\u002Fcdp_publish.py fill --title \"标题\" --content \"正文\" --images img.jpg\npython scripts\u002Fcdp_publish.py fill --title \"标题\" --content \"正文\" --images img.jpg --reuse-existing-tab\npython scripts\u002Fcdp_publish.py --host 10.0.0.12 --port 9222 fill --title \"标题\" --content \"正文\" --images img.jpg\n\n# 点击发布按钮\npython scripts\u002Fcdp_publish.py click-publish\n\n# 获取登录二维码（支持下划线别名：get_login_qrcode）\npython scripts\u002Fcdp_publish.py get-login-qrcode\n\n# 首页推荐列表（支持下划线别名：list_feeds）\npython scripts\u002Fcdp_publish.py list-feeds\n\n# 搜索笔记（支持下划线别名：search_feeds）\npython scripts\u002Fcdp_publish.py search-feeds --keyword \"春招\"\npython scripts\u002Fcdp_publish.py search-feeds --keyword \"春招\" --sort-by 最新 --note-type 图文\n\n# 获取笔记详情（支持下划线别名：get_feed_detail）\npython scripts\u002Fcdp_publish.py get-feed-detail --feed-id FEED_ID --xsec-token XSEC_TOKEN\npython scripts\u002Fcdp_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\n\n# 发表评论（支持下划线别名：post_comment_to_feed）\npython scripts\u002Fcdp_publish.py post-comment-to-feed --feed-id FEED_ID --xsec-token XSEC_TOKEN --content \"评论内容\"\n\n# 回复评论（支持下划线别名：respond_comment）\npython scripts\u002Fcdp_publish.py respond-comment --feed-id FEED_ID --xsec-token XSEC_TOKEN --content \"回复内容\" [--comment-id COMMENT_ID]\n\n# 点赞\u002F取消点赞（支持下划线别名：note_upvote \u002F note_unvote）\npython scripts\u002Fcdp_publish.py note-upvote --feed-id FEED_ID --xsec-token XSEC_TOKEN\npython scripts\u002Fcdp_publish.py note-unvote --feed-id FEED_ID --xsec-token XSEC_TOKEN\n\n# 收藏\u002F取消收藏（支持下划线别名：note_bookmark \u002F note_unbookmark）\npython scripts\u002Fcdp_publish.py note-bookmark --feed-id FEED_ID --xsec-token XSEC_TOKEN\npython scripts\u002Fcdp_publish.py note-unbookmark --feed-id FEED_ID --xsec-token XSEC_TOKEN\n\n# 用户主页快照\u002F主页笔记（支持下划线别名：profile_snapshot \u002F notes_from_profile）\npython scripts\u002Fcdp_publish.py profile-snapshot --profile-url \"https:\u002F\u002Fwww.xiaohongshu.com\u002Fuser\u002Fprofile\u002FUSER_ID\"\npython scripts\u002Fcdp_publish.py notes-from-profile --user-id USER_ID --limit 20 --max-scrolls 3\n\n# 抓取通知评论接口（支持下划线别名：get_notification_mentions）\npython scripts\u002Fcdp_publish.py get-notification-mentions\n\n# 获取内容数据表（支持下划线别名：content_data）\npython scripts\u002Fcdp_publish.py content-data\npython scripts\u002Fcdp_publish.py content-data --csv-file \"\u002Fabs\u002Fpath\u002Fcontent_data.csv\"\n\n# 账号管理\npython scripts\u002Fcdp_publish.py login\npython scripts\u002Fcdp_publish.py list-accounts\npython scripts\u002Fcdp_publish.py add-account NAME [--alias ALIAS]\npython scripts\u002Fcdp_publish.py remove-account NAME [--delete-profile]\npython scripts\u002Fcdp_publish.py set-default-account NAME\npython scripts\u002Fcdp_publish.py switch-account\n```\n\n说明：`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` 主页登录态（非创作者中心登录态）。\n说明：登录态检查默认启用本地缓存（12 小时，仅缓存“已登录”结果），到期后自动重新走网页校验。\n说明：`get-login-qrcode` 返回 `qrcode_base64` \u002F `qrcode_data_url`，便于远程前端直接展示扫码。\n说明：`search-feeds` 输出新增 `recommended_keywords_count` 与 `recommended_keywords` 字段，表示输入关键词后回车前的下拉推荐词。\n说明：`search-feeds` 返回当前页面可提取到的结果，不提供单独的 `--limit` 条数控制；若只需前 N 条，请在调用方截断返回列表。\n说明：`get-feed-detail --load-all-comments` 额外返回 `comment_loading`，用于说明评论滚动加载结果。\n说明：`content-data` 会校验创作者中心登录态，并抓取 `statistics\u002Fdata-analysis` 页面中的笔记基础信息表。\n\n### chrome_launcher.py\n\nChrome 浏览器管理。\n\n```bash\n# 启动 Chrome\npython scripts\u002Fchrome_launcher.py\npython scripts\u002Fchrome_launcher.py --headless\n\n# 重启 Chrome\npython scripts\u002Fchrome_launcher.py --restart\n\n# 关闭 Chrome\npython scripts\u002Fchrome_launcher.py --kill\n```\n\n## 支持各种 Skill 工具\n\n本项目可作为 Claude Code、OpenCode 等支持 Skill 的工具使用，只需将项目复制到 `.claude\u002Fskills\u002Fpost-to-xhs\u002F` 目录，并添加 `SKILL.md` 文件即可。\n\n详见 [docs\u002Fclaude-code-integration.md](docs\u002Fclaude-code-integration.md)\n\n## 注意事项\n\n1. **仅供学习研究**：请遵守小红书平台规则，不要用于违规内容发布\n2. **登录安全**：Cookie 存储在本地 Chrome Profile 中，请勿泄露\n3. **选择器更新**：如果小红书页面结构变化导致发布失败，需要更新 `cdp_publish.py` 中的选择器\n4. feed 的图片类型\n- WB_PRV：预览图（preview），通常更轻、更快，适合列表卡片。\n  - WB_DFT：默认图（default），通常用于详情展示，质量\u002F尺寸更完整。\n\n## RoadMap\n- [x] 支持更多账号管理功能\n- [x] 支持发布功能\n- [x] 增加后台笔记获取功能\n- [x] 支持自动评论\n- [x] 支持素材检索功能\n- [x] 增加更多错误处理机制\n\n\n## 许可证\n\nMIT License\n\n## 联系方式\n\n微信号：`whitedewstory`\n\n\u003Cimg src=\"public\u002Fwhitedew.jpg\" alt=\"微信二维码\" width=\"240\" \u002F>\n\n### 微信群二维码\n微信群：白露的 Ai+知识圈 1\n\u003Cimg src=\"https:\u002F\u002Fpng1.aistar.cool\u002Fqr\u002Fwechat-group.png\" alt=\"微信群二维码\" width=\"240\" \u002F>\n\n### 知识星球，分享最新的使用技巧\n\u003Cimg src=\"20260302-141029.jpg\" alt=\"知识星球二维码\" width=\"240\" \u002F>\n\n## Stars\n[![Stargazers over time](https:\u002F\u002Fstarchart.cc\u002Fwhite0dew\u002FXiaohongshuSkills.svg?variant=adaptive)](https:\u002F\u002Fstarchart.cc\u002Fwhite0dew\u002FXiaohongshuSkills)\n\n## 致谢\n灵感来自：[Post-to-xhs](https:\u002F\u002Fgithub.com\u002FAngiin\u002FPost-to-xhs)\n","RedBookSkills 是一个用于小红书内容自动发布的命令行工具，支持图文、视频发布及多账号管理等功能。该工具基于 Chrome DevTools Protocol (CDP) 实现自动化操作，具有无头模式运行、远程 CDP 支持、图片下载与防盗链处理等技术特点。它还提供了话题标签自动写入、登录状态检测和缓存、首页推荐流抓取、笔记评论与回复、用户页信息提取等功能，能够帮助用户高效地进行内容管理和互动。适用于需要批量发布内容或进行数据分析的小红书创作者及运营人员。",2,"2026-06-11 03:48:52","high_star"]