
摘要:本文详细介绍如何在 OpenClaw 中安装配置 toutiao-publisher 技能,实现从文章创作到头条号发布的全流程自动化。包含基础安装步骤、使用方法、以及实战中的优化建议。
关键词:OpenClaw、头条号、自动化发布、浏览器自动化
一、技能介绍
1.1 功能概述
toutiao-publisher 是一个头条号自动发布技能,支持:
- ✅ 持久化认证:扫码登录一次,7 天内免登录
- ✅ Markdown 支持:自动转换为头条富文本格式
- ✅ 封面图上传:自动选择并上传封面图片
- ✅ 标题优化:自动调整标题长度(2-30 字符)
- ✅ 发布确认:自动完成两步发布流程
1.2 适用场景
- 技术博主定期发布深度文章
- 自媒体运营多平台分发
- 企业内容团队批量发布
- 开发者工具集成到工作流
1.3 技术原理
基于 Patchright(防检测的 Playwright)控制真实 Chrome 浏览器,模拟人工操作:
登录 → 导航到发布页 → 填充标题 → 粘贴内容 → 上传封面 → 点击发布
二、快速开始
2.1 环境要求
- OpenClaw 2026.02.28+
- Python 3.10+
- Google Chrome 浏览器(已安装)
- 头条号账号(已注册)
2.2 安装技能
在工作区执行:
npx skills add https://github.com/guanyang/super-publisher --skill toutiao-publisher
安装位置:
~/.openclaw/workspace/.agents/skills/toutiao-publisher/
2.3 首次登录
cd ~/.openclaw/workspace/.agents/skills/toutiao-publisher
python scripts/run.py publisher.py
流程:
- 浏览器自动打开头条号登录页
- 使用手机头条 APP 扫码登录
- 登录成功后自动保存会话
- 按
Ctrl+C关闭浏览器
✅ 认证一次,长期有效(Cookie 有效期 7 天)
2.4 发布文章
基础命令:
python scripts/run.py publisher.py \
--title "文章标题" \
--content "文章.md" \
--cover "封面.png"
参数说明:
| 参数 | 必填 | 说明 |
|---|---|---|
--title |
✅ | 2-30 字符,超长自动截断 |
--content |
✅ | Markdown 文件路径 |
--cover |
❌ | 封面图路径(16:9 推荐) |
--headless |
❌ | 后台运行(需已登录) |
三、使用示例
3.1 发布本地文章
# 准备文件
ls temp/article.md temp/cover.png
# 发布
python scripts/run.py publisher.py \
--title "AI 编程效率提升指南" \
--content "temp/article.md" \
--cover "temp/cover.png"
3.2 从数据库发布
工作流:
数据库文章 → 下载封面图 → 调用发布 → 更新状态
示例代码:
import pymysql
import subprocess
# 1. 获取文章
article = db.query("SELECT * FROM articles WHERE id = 249")
# 2. 下载封面图
download_image(article.image_url, "temp/cover.png")
# 3. 调用发布
subprocess.run([
"python", "scripts/run.py publisher.py",
"--title", article.title,
"--content", f"temp/article.md",
"--cover", "temp/cover.png"
])
# 4. 更新状态
db.execute("UPDATE articles SET toutiao_published = 1 WHERE id = 249")
3.3 自然语言调用
在 OpenClaw 会话中直接说:
"把文章 249 发布到头条"
Agent 会自动:
- 从数据库获取文章信息
- 下载封面图到临时目录
- 调用发布技能
- 更新数据库状态
四、管理命令
4.1 检查登录状态
python scripts/run.py auth_manager.py status
输出示例:
✅ Authentication valid
📁 State file: /path/to/state.json
⏱️ State age: 0.5 hours
4.2 清除认证(退出登录)
python scripts/run.py auth_manager.py clear
rm -rf data/browser_state
五、常见问题
Q1:Cookie 过期了怎么办?
重新运行发布命令,会自动弹出浏览器提示扫码登录:
python scripts/run.py publisher.py # 扫码登录
Q2:可以在无头模式下登录吗?
不可以。首次登录必须显示浏览器窗口以便扫码:
# ❌ 错误:无头模式无法扫码
python scripts/run.py publisher.py --headless
# ✅ 正确:先登录,之后可用无头模式
python scripts/run.py publisher.py # 扫码登录
python scripts/run.py publisher.py --headless # 后续发布
Q3:正文内容为空怎么办?
这是头条 ProseMirror 编辑器的防御机制。脚本已自动处理,使用 execCommand 注入 HTML:
page.evaluate("""
editor.focus();
document.execCommand('insertHTML', false, html);
""")
Q4:保存失败警告会影响发布吗?
不会。封面图上传会强制触发保存,可以忽略警告。
Q5:标题超过 30 字怎么办?
脚本自动截断并提示:
⚠️ Title optimized (truncated to 30 chars):
'这是一篇非常长的标题超过 30 字会被自动截断'
→ '这是一篇非常长的标题超过 30 字会被'
Q6:进程锁定(TargetClosedError)
上次运行异常退出导致 Chrome 锁死:
pkill -f "Chrome" # 清理进程
六、实战优化建议(扩展)
说明:以下优化基于实际使用场景,是对原 skill 的增强建议,可根据需求选择应用。
6.1 Markdown 格式增强
问题背景
原 skill 的 Markdown 转换器为自制解析器,不支持引用块(>)等格式:
原文:
> AI 把人的"能力瓶颈",变成了"时间瓶颈"。
原转换(错误):
<p>> AI 把人的"能力瓶颈",变成了"时间瓶颈"。</p>
期望转换:
<blockquote>
<p>AI 把人的"能力瓶颈",变成了"时间瓶颈"。</p>
</blockquote>
优化方案
使用 Python markdown 库替代自制解析器
修改文件:scripts/md2html.py
安装依赖:
cd ~/.openclaw/workspace/.agents/skills/toutiao-publisher
source .venv/bin/activate
pip install markdown==3.10.2
更新代码:
# md2html.py
import markdown
def convert(text, extensions=None):
if extensions is None:
extensions = ['extra', 'codehilite']
html = markdown.markdown(text, extensions=extensions)
return optimize_for_toutiao(html)
新增支持格式:
| 格式 | Markdown 语法 | HTML 输出 |
|---|---|---|
| 引用块 | > 内容 |
<blockquote> ✅ |
| 斜体 | *text* |
<em> ✅ |
| 链接 | [文本](url) |
<a href> ✅ |
| 图片 |  |
<img> ✅ |
| 水平线 | --- |
<hr/> ✅ |
| 表格 | ` | col1 |
| 有序列表 | 1. 2. 3. |
<ol> ✅ |
效果对比:
- ✅ 支持格式从 5 种增至 15+ 种
- ✅ 代码更简洁(减少 70%)
- ✅ 维护成本降低
6.2 保存检测优化
问题背景
发布过程中频繁触发"保存失败"警告,原脚本采用10 次重试循环:
# 原逻辑
for _ in range(10):
if "保存失败" visible:
editor.type(" ") # 输入空格触发保存
time.sleep(3)
问题:
- ❌ 耗时 30-50 秒
- ❌ 日志噪音多(10 次警告)
- ❌ 实际发布仍成功(冗余操作)
优化方案
通过观察发现:封面图上传会强制触发整篇文章保存
新逻辑:
# 优化后
time.sleep(3) # 等待内容处理
# 依赖封面图上传触发保存
修改文件:scripts/publisher.py(第 175-203 行)
优化前后对比:
| 指标 | 优化前 | 优化后 | 改进 |
|---|---|---|---|
| 保存检测耗时 | 30-50 秒 | 6 秒 | ⚡ 快 5-8 倍 |
| 重试次数 | 10 次 | 0 次 | ✅ 无冗余 |
| 日志噪音 | 多次警告 | 1 次提示 | 📉 更清晰 |
| 发布成功率 | 100% | 100% | ✅ 保持不变 |
日志对比:
# 优化前
❌ Alert: 'Save Failed' detected! (×10)
Typing space to trigger autosave... (×10)
# 优化后
ℹ️ Save status pending - cover upload will trigger persistence.
6.3 封面图持久化建议
问题背景
AI 生成的封面图通常存储在临时 URL(有效期 1 小时),需要在发布前下载到本地:
# 从云存储下载
curl -L -o temp/cover_249.png "http://cloud.example.com/xxx.png"
最佳实践
工作流集成:
# 1. 生成文章时同时生成封面图
image_url = generate_cover(article.title)
# 2. 立即持久化到本地
download_image(image_url, "temp/cover.png")
# 3. 调用发布(使用本地路径)
publish(title, content, "temp/cover.png")
封面图规范:
- 尺寸:1664×928(16:9)
- 格式:PNG 或 JPG
- 大小:<5MB
- 内容:避免文字过多
6.4 数据库字段扩展
建议新增字段
为追踪发布状态,建议在文章表中添加:
ALTER TABLE articles ADD COLUMN toutiao_published TINYINT(1) DEFAULT 0;
ALTER TABLE articles ADD COLUMN toutiao_url VARCHAR(1024);
ALTER TABLE articles ADD COLUMN toutiao_published_at DATETIME;
状态更新:
UPDATE articles
SET toutiao_published = 1,
toutiao_url = 'https://mp.toutiao.com/',
toutiao_published_at = NOW()
WHERE id = <文章 ID>
6.5 批量发布建议
场景
需要一次发布多篇文章时:
#!/bin/bash
# batch_publish.sh
for article in articles/*.md; do
echo "发布:$article"
python scripts/run.py publisher.py \
--title "$(basename $article .md)" \
--content "$article" \
--cover "covers/$(basename $article .md).png"
# 间隔 5 分钟(避免触发审核)
sleep 300
done
注意事项:
- 单账号每日发布 ≤10 篇
- 发布时间间隔 ≥5 分钟
- 避免在深夜发布(23:00-08:00)
七、性能对比
7.1 发布效率
| 指标 | 手动发布 | 自动化发布 | 提升 |
|---|---|---|---|
| 单次耗时 | 5-10 分钟 | 30 秒 | ⚡ 10-20 倍 |
| 格式处理 | 手动调整 | 自动转换 | ✅ 零误差 |
| 登录频率 | 每次登录 | 7 天一次 | ✅ 免登录 |
7.2 优化效果
| 优化项 | 优化前 | 优化后 | 改进 |
|---|---|---|---|
| Markdown 格式 | 5 种 | 15+ 种 | +200% |
| 保存检测 | 30-50 秒 | 6 秒 | 快 5-8 倍 |
| 引用块支持 | ❌ | ✅ | 已修复 |
八、总结
8.1 核心优势
- 持久化认证:一次登录,7 天有效
- 完整 Markdown 支持:15+ 种格式自动转换
- 智能保存检测:封面图上传触发保存
- 防检测浏览器:Patchright + 真实 Chrome
8.2 使用建议
- ✅ 首次使用建议在有显示器环境下登录
- ✅ 封面图提前下载到本地
- ✅ 标题手动优化(避免自动截断影响语义)
- ✅ 批量发布注意间隔时间(≥5 分钟)
8.3 优化方向
- 支持视频上传
- 支持微头条发布
- 支持评论区管理
- 数据统计分析
附录
A. 命令速查
# 安装技能
npx skills add https://github.com/guanyang/super-publisher --skill toutiao-publisher
# 首次登录
python scripts/run.py publisher.py
# 发布文章
python scripts/run.py publisher.py --title "标题" --content "文章.md" --cover "封面.png"
# 检查状态
python scripts/run.py auth_manager.py status
# 清除认证
python scripts/run.py auth_manager.py clear
B. 参考资源
- 技能仓库:https://github.com/guanyang/super-publisher
- OpenClaw 文档:https://docs.openclaw.ai
- Patchright 文档:https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python
C. 版本信息
- 技能版本:1.0.0
- Patchright:1.55.2
- Markdown:3.10.2(优化新增)
- 最后更新:2026-03-02





