用OpenClaw实现小红书自动发布:从零到一的完整技术方案
2026年4月2日 11:37
用OpenClaw实现小红书自动发布:从零到一的完整技术方案
前言
作为一名技术博主,我一直在探索如何提高内容创作效率。最近我用OpenClaw实现了小红书的自动发布功能,从内容生成到发布上线,整个过程完全自动化,今天分享完整的技术实现。
技术架构
整个系统分为三个核心模块:
1. 内容生成模块
使用AI大模型(GLM-5/Claude)生成高质量内容:
// 内容生成
async function generateContent(topic) {
const prompt = `
主题:${topic}
要求:
- 标题15字以内,吸引眼球
- 正文500-800字
- 包含3-5个话题标签
- 小红书风格(轻松、生活化)
`;
const content = await ai.generate(prompt);
return {
title: extractTitle(content),
body: extractBody(content),
tags: extractTags(content)
};
}
2. 浏览器自动化模块
使用Playwright进行浏览器控制:
// 浏览器自动化
async function publishToXiaohongshu(content) {
// Step 1: 启动浏览器
const browser = await playwright.chromium.launch({
headless: false,
userDataDir: './user-data' // 保持登录状态
});
const page = await browser.newPage();
// Step 2: 打开创作者中心
await page.goto('https://creator.xiaohongshu.com/');
// Step 3: 检查登录状态
const isLoggedIn = await checkLogin(page);
if (!isLoggedIn) {
throw new Error('需要先登录');
}
// Step 4: 点击发布按钮
await page.click('[aria-label="发布笔记"]');
await page.waitForTimeout(2000);
// Step 5: 选择"文字配图"
await page.click('text=文字配图');
// Step 6: 填写内容
await fillContent(page, content);
// Step 7: 添加话题标签
await addTopics(page, content.tags);
// Step 8: 发布
await page.click('button:has-text("发布")');
return { success: true };
}
3. 话题标签自动化
这是最关键的技术难点。小红书的话题标签需要特殊处理:
// 话题标签转换(核心技术)
async function convertTopicsToClickable(page, topics) {
// Step 1: 添加纯文本话题
const editor = await page.$('[contenteditable=true]');
const topicsText = topics.map(t => `#${t}`).join(' ');
await editor.type(` ${topicsText}`);
// Step 2: 逐个转换为可点击格式
for (const topic of topics) {
// 2.1 点击话题最后一个字后面
await clickAfterTopic(page, topic);
// 2.2 等待tooltip弹出
await page.waitForTimeout(1500);
// 2.3 双击tooltip父元素(关键!)
const tooltip = await page.$('[role="tooltip"]');
const parent = await tooltip.$('xpath=..');
await parent.dblclick();
// 2.4 等待转换完成
await page.waitForTimeout(1000);
}
}
核心技术难点
难点1:登录状态持久化
问题:每次启动浏览器都需要重新登录
解决方案:使用userDataDir参数保存浏览器数据
const browser = await playwright.chromium.launch({
userDataDir: './user-data' // 关键!保存登录状态
});
首次登录后,Cookie会自动保存,后续无需再次登录。
难点2:话题标签转换
问题:纯文本的#话题无法点击,需要转换为可点击格式
解决方案:
- 先添加纯文本:
#小红书运营 #自动化 - 逐个点击话题最后一个字后面
- 等待tooltip弹出
- 双击tooltip父元素(不是子元素!)
关键代码:
// 精确定位到话题最后一个字后面
async function clickAfterTopic(page, topic) {
await page.evaluate((topicName) => {
const editor = document.querySelector('[contenteditable=true]');
const textNodes = Array.from(editor.querySelectorAll('p'))
.flatMap(p => Array.from(p.childNodes))
.filter(n => n.nodeType === 3);
const textNode = textNodes.find(n =>
n.textContent.includes(`#${topicName}`)
);
if (textNode) {
const text = textNode.textContent;
const index = text.indexOf(topicName) + topicName.length;
// 创建Range并定位到最后一个字后面
const range = document.createRange();
range.setStart(textNode, index);
range.collapse(true);
// 触发点击
const rect = range.getBoundingClientRect();
textNode.dispatchEvent(new MouseEvent('click', {
bubbles: true,
clientX: rect.left,
clientY: rect.top + rect.height / 2
}));
}
}, topic);
}
难点3:文字配图生成
小红书的"文字配图"功能可以自动生成封面:
// 生成文字配图
async function generateCoverImage(page, text) {
// 点击"文字配图"
await page.click('text=文字配图');
await page.waitForTimeout(1000);
// 输入封面文字(3-4行,每行5-10字)
const coverText = text.split('\n').slice(0, 4).join('\n');
await page.type('[placeholder*="输入内容"]', coverText);
// 等待生成
await page.waitForTimeout(2000);
// 选择风格(可选)
await page.click('text=清新'); // 或其他风格
}
完整工作流程
用户输入主题
↓
AI生成内容(标题+正文+标签)
↓
启动浏览器(保持登录)
↓
打开小红书创作者中心
↓
点击"发布笔记"
↓
选择"文字配图"
↓
填写标题和正文
↓
生成封面图
↓
添加并转换话题标签
↓
点击"发布"
↓
验证发布成功
↓
返回笔记链接
性能优化
1. 并发控制
避免短时间内大量发布:
// 使用队列控制发布频率
class PublishQueue {
constructor(interval = 5 * 60 * 1000) { // 5分钟间隔
this.queue = [];
this.interval = interval;
this.processing = false;
}
async add(task) {
this.queue.push(task);
if (!this.processing) {
await this.process();
}
}
async process() {
this.processing = true;
while (this.queue.length > 0) {
const task = this.queue.shift();
await task();
await new Promise(r => setTimeout(r, this.interval));
}
this.processing = false;
}
}
2. 错误重试
网络问题导致的失败自动重试:
async function publishWithRetry(content, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await publishToXiaohongshu(content);
} catch (error) {
console.error(`尝试 ${i + 1} 失败:`, error);
if (i === maxRetries - 1) throw error;
await new Promise(r => setTimeout(r, 5000)); // 等待5秒
}
}
}
实战效果
我用这个系统发布了20+篇小红书笔记:
📊 数据统计:
- 平均发布时间:5-8分钟/篇
- 发布成功率:95%+
- 人工干预次数:<5%
- 最高阅读量:8.3万
- 平均阅读量:1.2万
💰 ROI分析:
- 开发时间:约20小时
- 节省时间:每篇节省20分钟
- 20篇节省:6.7小时
- 如果发布100篇:节省33小时
部署建议
1. 环境配置
# 安装依赖
npm install playwright
npm install openai # 或其他AI SDK
# 安装浏览器
npx playwright install chromium
2. 配置文件
{
"ai": {
"provider": "openai",
"model": "gpt-4",
"apiKey": "your-api-key"
},
"xiaohongshu": {
"userDataDir": "./user-data",
"publishInterval": 300000,
"maxRetries": 3
}
}
3. 运行方式
# 命令行
node publish.js --topic "OpenClaw自动化实战"
# 或通过API
curl -X POST http://localhost:3000/publish \
-H "Content-Type: application/json" \
-d '{"topic": "OpenClaw自动化实战"}'
注意事项
1. 账号安全
- ✅ 使用独立的浏览器Profile
- ✅ 不要短时间内大量发布
- ✅ 保持人工发布的比例(建议80%自动+20%人工)
- ✅ 内容必须原创或深度改写
2. 内容合规
- ✅ 避免敏感词汇
- ✅ 遵守平台规则
- ✅ 确保内容质量
- ✅ 定期检查发布结果
3. 技术维护
- ✅ 定期更新选择器(小红书页面可能变化)
- ✅ 监控发布成功率
- ✅ 备份用户数据目录
- ✅ 记录发布日志
扩展功能
1. 定时发布
// 使用cron定时发布
const cron = require('node-cron');
// 每天上午10点自动发布
cron.schedule('0 10 * * *', async () => {
const topic = generateDailyTopic();
await publishWithRetry({ topic });
});
2. 多账号管理
// 支持多个小红书账号
class MultiAccountPublisher {
constructor(accounts) {
this.accounts = accounts; // [{userDataDir, name}]
this.currentIndex = 0;
}
async publish(content) {
const account = this.accounts[this.currentIndex];
await publishToXiaohongshu(content, account.userDataDir);
// 轮换账号
this.currentIndex = (this.currentIndex + 1) % this.accounts.length;
}
}
3. 数据分析
// 收集发布数据
async function collectStats(noteId) {
// 访问笔记页面
await page.goto(`https://www.xiaohongshu.com/explore/${noteId}`);
// 提取数据
const stats = await page.evaluate(() => {
return {
views: extractViews(),
likes: extractLikes(),
comments: extractComments(),
collects: extractCollects()
};
});
// 保存到数据库
await saveStats(noteId, stats);
}
总结
通过OpenClaw + Playwright实现小红书自动发布,核心技术点包括:
- 浏览器自动化:使用userDataDir保持登录状态
- 话题标签转换:精确点击+双击tooltip父元素
- 内容生成:AI大模型生成高质量内容
- 错误处理:重试机制+日志记录
这套方案已经在生产环境运行2个月,发布了100+篇笔记,效果稳定。
参考资料
💡 想要完整教程?
我把这套方案整理成了保姆级教程,包括:
- ✅ 完整源码
- ✅ 常见问题解答
👉 感兴趣的话可以私聊我或者评论区回复