- 工作流名称: 公众号+coze自动发布文章
- 工作流ID: SoLRVvusHdvXBodD
- 修改目标: 在"循环处理"和"COZE改写"之间添加2个节点
- 访问 http://localhost:5678
- 点击左侧
工作流列表 - 找到并点击
公众号+coze自动发布文章
位置: 在"循环处理"节点之后
- 点击"循环处理"节点和下一个节点之间的
+号 - 搜索并选择
HTTP Request节点 - 配置如下:
节点名称: 抓取网页
【HTTP Request配置】
- Method: GET
- URL: {{ $json.url }}
- Options:
- Timeout: 20000
备注: 添加到节点的Notes: "抓取文章网页HTML"
位置: 在"抓取网页"节点之后
- 点击"抓取网页"节点后的
+号 - 搜索并选择
Code节点 - 配置如下:
节点名称: 提取正文
【Code配置】
- Mode: Run Once for All Items
- JavaScript Code: (复制下面的代码)
JavaScript代码:
// 提取网页正文内容
const cheerio = require('cheerio');
const input = $input.all()[0];
const html = input.json.data || input.json.body || input.binary?.data?.toString();
const originalUrl = input.json.url || $('循环处理').last().json.url;
const originalTitle = input.json.title || $('循环处理').last().json.title;
if (!html) {
throw new Error('未获取到网页HTML');
}
console.log(`[提取正文] URL: ${originalUrl}`);
console.log(`[提取正文] 原标题: ${originalTitle}`);
const $ = cheerio.load(html);
// 移除脚本、样式等无关内容
$('script, style, iframe, nav, footer, header, aside, .ad, .advertisement').remove();
// 提取正文的多种策略
let content = '';
const contentSelectors = [
'article',
'.article-content, .post-content, .content',
'.main-content, #content',
'[class*="content"]',
'main',
];
for (const selector of contentSelectors) {
const $content = $(selector).first();
if ($content.length > 0) {
content = $content.text().trim();
if (content.length > 100) {
console.log(`[提取正文] 使用选择器: ${selector},提取 ${content.length} 字符`);
break;
}
}
}
// 降级策略:提取body内所有文本
if (!content || content.length < 100) {
content = $('body').text().trim();
console.log(`[提取正文] 使用降级策略,提取 ${content.length} 字符`);
}
// 清理内容
content = content
.replace(/\s+/g, ' ') // 合并空白
.replace(/\n{3,}/g, '\n\n') // 合并多余换行
.trim()
.substring(0, 3000); // 限制在3000字以内
console.log(`[提取正文] 最终内容长度: ${content.length} 字符`);
return [{
json: {
url: originalUrl,
title: originalTitle,
content: content,
contentLength: content.length
}
}];- 点击"COZE改写"节点(之前可能叫"使用Coze改写工作流")
- 找到
JSON Body配置 - 修改
parameters部分:
原来的(错误):
{
"workflow_id": "7573873083216707599",
"parameters": {
"input": "{{ $json.subject }}"
}
}改为(正确):
{
"workflow_id": "7573873083216707599",
"parameters": {
"BOT_USER_INPUT": "标题:{{ $json.title }}\n\n正文:{{ $json.content }}"
}
}确保连接顺序为:
循环处理
↓
抓取网页(新增)
↓
提取正文(新增)
↓
COZE改写
↓
解析COZE输出
↓
发布草稿
操作方法:
- 断开"循环处理"到原来下一个节点的连接
- 连接"循环处理" → "抓取网页"
- 连接"抓取网页" → "提取正文"
- 连接"提取正文" → "COZE改写"
- 其他连接保持不变
如果想增强图片提取,可以在解析节点的代码中添加:
// 在解析content后添加
const imgMatches = content.match(/<img[^>]+src=["']([^"']+)["'][^>]*>/g) || [];
console.log('[解析] HTML中图片标签数量:', imgMatches.length);
// 在返回的json中添加
return [{
json: {
title: title,
content: content,
images: images,
imageCount: imgMatches.length // 新增
}
}];- 点击右上角
Save保存工作流 - 点击
Execute Workflow测试运行 - 观察每个节点的执行情况,特别是:
- "抓取网页"节点是否成功获取HTML
- "提取正文"节点是否提取到内容(查看日志)
- "COZE改写"节点是否收到标题+正文
- "抓取网页"节点添加成功
- "提取正文"节点添加成功
- "COZE改写"节点的输入改为
BOT_USER_INPUT: "标题:...\n\n正文:..." - 节点连接顺序正确
- 保存工作流
- 测试执行成功
修改后,数据流变为:
热点URL → 抓取HTML → 提取正文 → COZE("标题+正文") → 生成图文 → 发布
解决的问题:
- ✅ COZE现在能收到完整的文章内容(不再是空的URL)
- ✅ COZE基于真实内容生成图文(质量更高)
- ✅ 生成的HTML应该包含图片
Q: 找不到"循环处理"节点?
A: 可能叫"循环处理每篇"或"splitInBatches",找类型为 splitInBatches 的节点
Q: cheerio报错? A: N8N内置了cheerio,不需要安装。如果报错,检查代码是否完整复制
Q: 提取的正文为空? A: 查看节点的执行日志,可能是目标网站结构特殊,需要调整选择器
立即开始修改吧!修改完成后运行一次,告诉我结果。