xiaohongshu-automation

Installation
SKILL.md

小红书自动化控制 Skill

概述

通过 Playwright MCP 工具连接到 OpenClaw 浏览器(CDP 端口 18800),实现小红书的自动化操作,包括发布内容、搜索、获取推荐、评论等功能。

前置条件

  1. OpenClaw 浏览器已启动:确保 OpenClaw 浏览器运行并开启 CDP 端口 18800
  2. 已登录小红书:首次使用需在 OpenClaw 浏览器中手动登录小红书账号
  3. Playwright MCP 可用:确保 mcp__Playwright__* 工具集已配置

连接方式

使用 Playwright 的 browser_run_code 工具通过 CDP 连接到 OpenClaw 浏览器:

// 连接到 OpenClaw 浏览器
const { chromium } = require('playwright');
const browser = await chromium.connectOverCDP('http://localhost:18800');
const context = browser.contexts()[0];
const page = context.pages()[0] || await context.newPage();

功能清单

功能 参数 说明
check_login_status 检查小红书登录状态
publish_content title, content, images 发布图文内容
publish_with_video title, content, video 发布视频内容
list_feeds 获取首页推荐列表
search_feeds keyword 搜索小红书内容
get_feed_detail feed_id, xsec_token 获取帖子详情
post_comment_to_feed feed_id, xsec_token, content 发表评论
user_profile user_id, xsec_token 获取用户主页信息
get_hot_topics category (可选) 获取热门话题列表
download_stock_images keyword, count 从图库下载无水印图片

功能实现指南

1. check_login_status - 检查登录状态

步骤:

  1. 使用 mcp__Playwright__browser_navigate 导航到 https://www.xiaohongshu.com
  2. 使用 mcp__Playwright__browser_snapshot 获取页面快照
  3. 检查快照中是否包含用户头像或登录按钮
  4. 返回登录状态

实现代码:

async (page) => {
  await page.goto('https://www.xiaohongshu.com');
  await page.waitForLoadState('networkidle');

  // 检查是否有登录用户的头像
  const userAvatar = await page.$('.user-avatar, .login-btn');
  const isLoggedIn = await page.$('.user-avatar') !== null;

  return { isLoggedIn, message: isLoggedIn ? '已登录' : '未登录,请先登录' };
}

2. publish_content - 发布图文内容

参数:

  • title (必需): 标题,不超过 20 字
  • content (必需): 正文内容,不超过 1000 字
  • images (必需): 图片数组,支持本地绝对路径或 HTTP 链接

步骤:

  1. 导航到发布页面 https://creator.xiaohongshu.com/publish/publish
  2. 等待页面加载完成
  3. 上传图片(点击上传区域,选择文件)
  4. 填写标题
  5. 填写正文内容
  6. 点击发布按钮
  7. 等待发布完成

实现代码:

async (page) => {
  const title = '你的标题';  // ≤20字
  const content = '你的正文内容';  // ≤1000字
  const images = ['/path/to/image1.jpg', '/path/to/image2.jpg'];

  // 1. 导航到发布页面
  await page.goto('https://creator.xiaohongshu.com/publish/publish');
  await page.waitForLoadState('networkidle');

  // 2. 上传图片
  const uploadInput = await page.$('input[type="file"]');
  await uploadInput.setInputFiles(images);
  await page.waitForTimeout(3000); // 等待上传完成

  // 3. 填写标题
  const titleInput = await page.$('[placeholder*="标题"]');
  await titleInput.fill(title);

  // 4. 填写正文
  const contentInput = await page.$('[placeholder*="正文"], .ql-editor');
  await contentInput.fill(content);

  // 5. 点击发布
  const publishBtn = await page.$('button:has-text("发布")');
  await publishBtn.click();

  // 6. 等待发布完成
  await page.waitForTimeout(5000);

  return { success: true, message: '发布成功' };
}

使用 Playwright MCP 工具的方式:

1. mcp__Playwright__browser_navigate: url="https://creator.xiaohongshu.com/publish/publish"
2. mcp__Playwright__browser_snapshot: 获取页面结构
3. mcp__Playwright__browser_file_upload: paths=["/path/to/image.jpg"]
4. mcp__Playwright__browser_type: ref="标题输入框ref", text="标题内容"
5. mcp__Playwright__browser_type: ref="正文输入框ref", text="正文内容"
6. mcp__Playwright__browser_click: ref="发布按钮ref"

3. publish_with_video - 发布视频内容

参数:

  • title (必需): 标题,不超过 20 字
  • content (必需): 正文内容,不超过 1000 字
  • video (必需): 视频文件本地绝对路径(不支持 HTTP 链接)

步骤:

  1. 导航到发布页面
  2. 上传视频文件
  3. 等待视频处理完成(可能需要较长时间)
  4. 填写标题和正文
  5. 点击发布

注意事项:

  • 仅支持本地视频文件
  • 视频处理时间较长,建议文件大小不超过 1GB
  • 需要等待视频处理完成后才能发布

4. list_feeds - 获取首页推荐列表

步骤:

  1. 导航到 https://www.xiaohongshu.com
  2. 等待页面加载
  3. 获取页面快照
  4. 解析推荐列表中的帖子信息

返回数据结构:

{
  "feeds": [
    {
      "feed_id": "帖子ID",
      "xsec_token": "安全令牌",
      "title": "帖子标题",
      "author": "作者名称",
      "likes": "点赞数",
      "cover_url": "封面图URL"
    }
  ]
}

实现代码:

async (page) => {
  await page.goto('https://www.xiaohongshu.com');
  await page.waitForLoadState('networkidle');

  // 获取推荐列表
  const feeds = await page.$$eval('.note-item, .feed-item', items => {
    return items.map(item => ({
      feed_id: item.getAttribute('data-id') || item.querySelector('a')?.href?.match(/\/explore\/(\w+)/)?.[1],
      title: item.querySelector('.title')?.textContent,
      author: item.querySelector('.author')?.textContent,
      likes: item.querySelector('.like-count')?.textContent
    }));
  });

  return { feeds };
}

5. search_feeds - 搜索小红书内容

参数:

  • keyword (必需): 搜索关键词

步骤:

  1. 导航到搜索页面 https://www.xiaohongshu.com/search_result?keyword={keyword}
  2. 等待搜索结果加载
  3. 解析搜索结果列表
  4. 返回帖子列表(包含 feed_id 和 xsec_token)

实现代码:

async (page) => {
  const keyword = '搜索关键词';

  await page.goto(`https://www.xiaohongshu.com/search_result?keyword=${encodeURIComponent(keyword)}`);
  await page.waitForLoadState('networkidle');

  // 解析搜索结果
  const results = await page.$$eval('.note-item', items => {
    return items.map(item => {
      const link = item.querySelector('a')?.href || '';
      const match = link.match(/\/explore\/(\w+)\?xsec_token=([^&]+)/);
      return {
        feed_id: match?.[1],
        xsec_token: match?.[2],
        title: item.querySelector('.title')?.textContent,
        author: item.querySelector('.author')?.textContent
      };
    });
  });

  return { keyword, results };
}

6. get_feed_detail - 获取帖子详情

参数:

  • feed_id (必需): 帖子 ID
  • xsec_token (必需): 安全令牌(从 list_feeds 或 search_feeds 获取)

步骤:

  1. 导航到帖子详情页 https://www.xiaohongshu.com/explore/{feed_id}?xsec_token={xsec_token}
  2. 等待页面加载
  3. 获取帖子内容、互动数据、评论列表

返回数据结构:

{
  "feed_id": "帖子ID",
  "title": "标题",
  "content": "正文内容",
  "images": ["图片URL数组"],
  "author": {
    "user_id": "用户ID",
    "nickname": "昵称",
    "avatar": "头像URL"
  },
  "stats": {
    "likes": "点赞数",
    "collects": "收藏数",
    "comments": "评论数",
    "shares": "分享数"
  },
  "comments": [
    {
      "user": "评论用户",
      "content": "评论内容",
      "time": "评论时间"
    }
  ]
}

7. post_comment_to_feed - 发表评论

参数:

  • feed_id (必需): 帖子 ID
  • xsec_token (必需): 安全令牌
  • content (必需): 评论内容

步骤:

  1. 导航到帖子详情页
  2. 定位评论输入框
  3. 输入评论内容
  4. 点击发送按钮
  5. 等待评论发布成功

实现代码:

async (page) => {
  const feed_id = '帖子ID';
  const xsec_token = '安全令牌';
  const comment = '评论内容';

  await page.goto(`https://www.xiaohongshu.com/explore/${feed_id}?xsec_token=${xsec_token}`);
  await page.waitForLoadState('networkidle');

  // 定位评论输入框
  const commentInput = await page.$('[placeholder*="评论"], .comment-input');
  await commentInput.click();
  await commentInput.fill(comment);

  // 点击发送
  const sendBtn = await page.$('button:has-text("发送"), .send-btn');
  await sendBtn.click();

  await page.waitForTimeout(2000);

  return { success: true, message: '评论发布成功' };
}

8. user_profile - 获取用户主页信息

参数:

  • user_id (必需): 用户 ID
  • xsec_token (必需): 安全令牌

步骤:

  1. 导航到用户主页 https://www.xiaohongshu.com/user/profile/{user_id}?xsec_token={xsec_token}
  2. 获取用户基本信息
  3. 获取统计数据
  4. 获取笔记列表

返回数据结构:

{
  "user_id": "用户ID",
  "nickname": "昵称",
  "bio": "简介",
  "avatar": "头像URL",
  "verified": "是否认证",
  "stats": {
    "following": "关注数",
    "followers": "粉丝数",
    "likes": "获赞数",
    "notes": "笔记数"
  },
  "notes": [
    {
      "feed_id": "笔记ID",
      "title": "标题",
      "cover": "封面图"
    }
  ]
}

9. get_hot_topics - 获取热门话题

参数:

  • category (可选): 话题分类,可选值:美食、美妆、时尚、出行、知识、兴趣爱好

入口URL: https://creator.xiaohongshu.com/new/inspiration

步骤:

  1. 导航到创作者中心笔记灵感页面
  2. 等待页面加载完成
  3. 如果指定了分类,点击对应分类标签
  4. 解析热门话题列表

返回数据结构:

{
  "category": "美食",
  "topics": [
    {
      "name": "早餐吃什么",
      "participants": "275.9万人",
      "views": "101.6亿次",
      "hot_notes": [
        {
          "title": "十分钟搞定✅好吃到光盘的番茄荷包蛋焖面‼️",
          "likes": "4.3万"
        }
      ]
    },
    {
      "name": "高颜值巧克力",
      "participants": "27.9万人",
      "views": "13.5亿次",
      "hot_notes": [...]
    }
  ]
}

实现代码:

async (page) => {
  const category = '美食'; // 可选:美食、美妆、时尚、出行、知识、兴趣爱好

  // 1. 导航到笔记灵感页面
  await page.goto('https://creator.xiaohongshu.com/new/inspiration');
  await page.waitForLoadState('networkidle');

  // 2. 如果指定分类,点击分类标签
  if (category) {
    const categoryTab = await page.$(`h6:has-text("${category}")`);
    if (categoryTab) await categoryTab.click();
    await page.waitForTimeout(1000);
  }

  // 3. 解析话题列表
  const topics = await page.$$eval('[class*="topic-card"]', cards => {
    return cards.map(card => ({
      name: card.querySelector('[class*="topic-name"]')?.textContent,
      participants: card.querySelector('[class*="participants"]')?.textContent,
      views: card.querySelector('[class*="views"]')?.textContent
    }));
  });

  return { category, topics };
}

使用 Playwright MCP 工具的方式:

1. mcp__Playwright__browser_navigate: url="https://creator.xiaohongshu.com/new/inspiration"
2. mcp__Playwright__browser_wait_for: time=2
3. mcp__Playwright__browser_snapshot: 获取页面结构
4. 解析快照中的话题信息

可用分类:

分类 包含话题示例
美食 早餐吃什么、高颜值巧克力、面条的花式做法、咖啡topping
美妆 化妆教程、护肤心得、美甲分享
时尚 穿搭分享、包包推荐、饰品搭配
出行 旅行攻略、酒店推荐、景点打卡
知识 学习方法、职场技能、理财知识
兴趣爱好 手工DIY、摄影技巧、宠物日常

10. download_stock_images - 下载无水印图片

参数:

  • keyword (必需): 搜索关键词(必须用英文)
  • count (可选): 下载数量,默认 3 张
  • save_dir (可选): 保存目录,默认当前项目目录

图片来源:Unsplash(唯一来源)

Unsplash 是全球最大的免费高清图库,所有图片均可免费商用,无需标注来源。

方式一:使用 Playwright 从 Unsplash 下载

async (page) => {
  const keyword = 'coffee shop'; // 搜索关键词(英文)
  const count = 3; // 下载数量
  const saveDir = '/Users/zee/Desktop/小红书自动化控制/images';

  // 1. 导航到 Unsplash 搜索页
  await page.goto(`https://unsplash.com/s/photos/${encodeURIComponent(keyword)}`);
  await page.waitForLoadState('networkidle');
  await page.waitForTimeout(2000);

  // 2. 获取图片下载链接
  const imageUrls = await page.$$eval('figure a[itemprop="contentUrl"]', (links, max) => {
    return links.slice(0, max).map(link => link.href + '/download?force=true');
  }, count);

  // 3. 逐个下载图片
  for (let i = 0; i < imageUrls.length; i++) {
    const downloadPage = await page.context().newPage();
    await downloadPage.goto(imageUrls[i]);
    // 图片会自动下载到默认下载目录
    await downloadPage.waitForTimeout(3000);
    await downloadPage.close();
  }

  return { success: true, count: imageUrls.length };
}

方式二:使用 Unsplash Source API(简单直接)

# 从 Unsplash 随机下载指定主题的图片
keyword="coffee,cafe"  # 用逗号分隔多个关键词
save_dir="/Users/zee/Desktop/小红书自动化控制/images"
mkdir -p "$save_dir"

# 下载 3 张 1080x1440 的竖版图片(适合小红书 3:4 比例)
for i in 1 2 3; do
  curl -L "https://source.unsplash.com/random/1080x1440/?${keyword}" \
    -o "${save_dir}/unsplash_$(date +%s)_${i}.jpg"
  echo "Downloaded image ${i}"
  sleep 2  # 避免请求过快,确保获取不同图片
done

echo "Done! Images saved to ${save_dir}"

方式三:使用 Unsplash API(需要免费 API Key,推荐)

  1. 注册获取 API Key: https://unsplash.com/developers
  2. 使用以下代码:
# Unsplash API 下载(更精准的搜索结果)
ACCESS_KEY="your_unsplash_access_key"
keyword="coffee shop dali"
save_dir="/Users/zee/Desktop/小红书自动化控制/images"
mkdir -p "$save_dir"

# 搜索图片
response=$(curl -s -H "Authorization: Client-ID ${ACCESS_KEY}" \
  "https://api.unsplash.com/search/photos?query=${keyword}&per_page=3&orientation=portrait")

# 解析并下载原图
echo "$response" | jq -r '.results[].urls.full' | while read url; do
  filename="${save_dir}/unsplash_$(date +%s%N).jpg"
  curl -L "$url" -o "$filename"
  echo "Downloaded: $filename"
  sleep 1
done

Playwright MCP 工具实现步骤:

1. mcp__Playwright__browser_navigate: url="https://unsplash.com/s/photos/coffee"
2. mcp__Playwright__browser_wait_for: time=2
3. mcp__Playwright__browser_snapshot: 获取页面结构,找到图片链接
4. mcp__Playwright__browser_click: 点击下载按钮
5. 或者直接获取图片 URL 后用 curl 下载

关键词转换规则:

根据话题/主题内容,AI 自动将中文转换为合适的英文搜索关键词。

转换原则:

  1. 将中文话题翻译成对应的英文词汇
  2. 添加相关的场景词(如 photography, aesthetic, lifestyle)
  3. 使用 2-4 个关键词组合,用空格分隔
  4. 优先使用具体、描述性的词汇

自动转换示例:

话题: "早餐吃什么" → 关键词: "breakfast food morning meal"
话题: "咖啡探店" → 关键词: "coffee shop cafe interior latte"
话题: "穿搭分享" → 关键词: "outfit fashion style ootd"
话题: "旅行攻略" → 关键词: "travel landscape adventure"
话题: "家居装饰" → 关键词: "home interior decor cozy"

图片尺寸参数:

参数 尺寸 适用场景
1080x1440 3:4 竖版 小红书推荐比例
1080x1080 1:1 方形 小红书方形图
1440x1080 4:3 横版 横版展示
1920x1080 16:9 宽屏 视频封面

完整工作流程示例:

用户: 获取最新的小红书热点,发布图文并且寻找配图

AI 执行步骤:
1. 调用 get_hot_topics 获取热门话题
   → 获取到话题: "早餐吃什么"

2. 将话题转换为英文关键词
   → "breakfast food morning delicious"

3. 调用 Unsplash 搜索并下载相关图片
   → searchAndDownload("breakfast food morning", "./images", 3, {orientation: "portrait"})

4. 根据话题生成文章内容
   → 标题、正文、推荐话题标签

5. 使用下载的图片发布到小红书
   → publish_content(title, content, images)

注意事项:

  • Unsplash 图片完全免费商用,无需标注来源
  • AI 根据话题内容智能生成英文关键词,无需固定映射表
  • 下载间隔建议 2 秒以上,避免被限流
  • 小红书推荐使用 3:4 竖版图片(orientation: portrait)

AI 内容生成提示词

评论生成提示词

生成评论时使用以下提示词,确保评论自然、真实:

你是一个小红书用户,正在浏览别人的帖子。请根据以下文章内容,写一条真实、自然的评论。

要求:
1. 像真人一样说话,口语化,不要书面语
2. 适当使用表情符号(1-3个即可,如😂🔥👍❤️✨😭)
3. 评论要和文章内容强相关,提到文章中的具体细节
4. 长度适中,1-2句话,不超过50字
5. 可以表达:共鸣、提问、分享类似经历、表示想去/想试
6. 使用口语词汇如:"绝了"、"太真实了"、"蹲一个"、"马住"、"冲了"、"爱住"、"救命"、"笑死"
7. 不要用"哈哈哈"开头,不要太夸张
8. 偶尔可以用不完整句子或省略主语

文章标题:{title}
文章内容:{content}

直接输出评论内容,不要任何解释或引号:

评论示例(好的):

  • "5r美式也太香了吧 下次去大理必冲!"
  • "救命这个院子就是我梦想中的样子😭"
  • "蹲一个具体地址 想去打卡"
  • "同款体验!上次去也是一呆一下午"
  • "看完立马收藏了 下个月就去✨"

评论示例(不好的):

  • "哈哈哈哈哈写得真好!" ❌ 太空洞
  • "感谢博主的分享,非常有帮助!" ❌ 太正式
  • "这篇文章写得很详细,我学到了很多。" ❌ 像机器人

发布文章提示词

生成小红书文章时使用以下提示词:

你是一个小红书博主,正在分享自己的真实体验。请根据主题写一篇小红书笔记。

要求:
1. 标题:不超过20字,要有吸引力,可用|分隔,适当加emoji
2. 正文:口语化、有画面感、像在和朋友聊天
3. 分段清晰,每段2-3句话,用空行分隔
4. 适当使用emoji点缀(每段1-2个),不要堆砌
5. 内容要具体:有细节、有感受、有实用信息
6. 结尾可以互动:提问或邀请评论
7. 不要在正文里写#标签(标签要单独通过话题按钮添加)

主题:{topic}
关键词:{keywords}
图片内容描述:{image_description}

输出格式:
标题:xxx
正文:xxx
推荐话题:xxx, xxx, xxx(3-5个相关话题)

文章示例(好的):

标题:大理旅居|终于找到我的咖啡乌托邦☕

正文:
在大理的第15天,每天最期待的就是去这家小店坐坐

推门进去就是阳光和咖啡香,老板是个不爱说话的大叔,但手冲技术一绝。点了杯云南日晒,果香炸裂,才18块😭

最喜欢下午四五点来,坐在院子里看苍山的云慢慢飘,时间好像停住了

有没有姐妹也在大理?求组队探店!

话题标签添加方式(重要!)

错误方式:直接在正文里写 #大理旅居 #咖啡

  • 这样写只是普通文本,不会生成可点击的话题标签

正确方式

  1. 写完正文后,点击输入框下方的「话题」按钮
  2. 搜索并选择相关话题
  3. 或者点击系统推荐的话题标签

Playwright 实现步骤

1. 填写完正文后
2. 点击「话题」按钮 (button "话题")
3. 在弹出的搜索框中输入话题关键词
4. 点击搜索结果中的话题进行添加
5. 重复添加3-5个相关话题

小红书运营知识

内容限制

  • 标题: 不超过 20 字
  • 正文: 不超过 1000 字(不含话题标签)
  • 话题标签: 建议 3-5 个
  • 每日发帖上限: 约 50 篇

最佳实践

  • 图文优于视频: 图文内容的流量通常比视频更好
  • 话题标签: 通过话题按钮添加,不要直接写在正文里
  • 热门话题: 选择浏览量高的话题能获得更多曝光
  • 单设备登录: 同一账号不允许在多个网页端登录,否则会被踢出
  • 发布时间: 晚上7-10点是流量高峰

风险提示

  • 避免频繁操作,建议间隔发布(2-5分钟)
  • 不要发布违规内容
  • Cookie 过期需要重新登录
  • 评论内容不要太模板化,容易被识别

使用示例

示例 1: 检查登录状态

用户: 检查小红书登录状态
AI: 使用 check_login_status 功能...

示例 2: 发布图文

用户: 帮我发布一篇小红书,标题是"今日美食分享",内容是"今天做了一道红烧肉...",图片用 /Users/zee/Pictures/food.jpg
AI: 使用 publish_content 功能...

示例 3: 搜索内容

用户: 搜索小红书上关于"旅行攻略"的内容
AI: 使用 search_feeds 功能,keyword="旅行攻略"...

示例 4: 获取帖子详情并评论

用户: 获取这个帖子的详情 feed_id=xxx, xsec_token=yyy,然后发表评论"写得真好!"
AI:
1. 使用 get_feed_detail 获取详情
2. 使用 post_comment_to_feed 发表评论

故障排除

问题 1: 无法连接到浏览器

解决方案: 确保 OpenClaw 浏览器已启动并开启 CDP 端口 18800

问题 2: 显示未登录

解决方案: 在 OpenClaw 浏览器中手动登录小红书账号

问题 3: 发布失败

解决方案:

  1. 检查标题是否超过 20 字
  2. 检查正文是否超过 1000 字
  3. 检查图片路径是否正确
  4. 检查账号是否被风控

问题 4: 获取不到 xsec_token

解决方案: xsec_token 需要从 list_feeds 或 search_feeds 的结果中获取,不能自己构造


相关资源

Installs
150
GitHub Stars
1
First Seen
Feb 20, 2026