将本地已排好版的 HTML 文件自动导入微信公众号草稿箱,省去手动复制粘贴的重复操作。
核心能力:
cd {skill_dir}
npm install playwright
npx playwright install chromium
# 完整命令(HTML路径 + 封面路径)
node scripts/publish-wechat.js /path/to/article.html /path/to/cover.png
# 如果封面在HTML同级目录且命名为 cover_xxx.png,可省略第二个参数
node scripts/publish-wechat.js /path/to/article.html
本 Skill 的精髓在 scripts/publish-wechat.js,它执行以下 14 个步骤:
| 步骤 | 操作 | 是否自动 | 备注 |
|---|---|---|---|
| :---- | :---- | :----: | :---- |
| 1 | 检查 HTML 文件和封面是否存在 | ✅ | 不存在则报错退出 |
| 2 | 解析 HTML(标题/摘要/正文/封面) | ✅ | 正则提取 |
| 3 | 展示解析结果让用户确认 | ✅ | 等待5秒自动继续 |
| 4 | 打开微信公众号后台 | ✅ | 非无头模式 |
| 5 | 等待扫码登录 | ⏳ | 最长等待3分钟 |
| 6 | 进入草稿箱 → 新建图文 | ✅ | - |
| 7 | 自动填写标题 | ✅ | - |
| 8 | 注入正文到编辑器 | ✅ | contenteditable / iframe 自动检测 |
| 9 | 填写作者 | ✅ | 默认"高国书" |
| 10 | 上传封面图 | ✅ | - |
| 11 | 封面失败则等待人工选择 | ⏳ | 30秒超时 |
| 12 | 截图让用户确认内容 | ✅ | 保存为 draft_confirm.png |
| 13 | 确认内容完整 | ⏳ | 20秒等待 |
| 14 | 点击「保存为草稿」 | ✅ | 截图保存结果 |
> ✅ = 自动执行 ⏳ = 需人工参与
编辑器自动检测优先级:
innerHTML// 登录等待
for (let i = 0; i < 180; i++) {
await page.waitForTimeout(1000);
const url = page.url();
if (url.includes('cgi-bin/home') || url.includes('token=')) break;
}
// Token 提取
const token = (page.url().match(/[?&]token=(\d+)/) || [])[1];
// 正文注入
await page.locator('[contenteditable="true"]').first()
.evaluate((el, html) => { el.innerHTML = html; }, htmlContent);
脚本通过以下 CSS 类名解析内容,生成的 HTML 需要包含这些结构:
<!-- 标题 -->
<div class="article-title">标题文字</div>
<!-- 封面引用 -->
<img src="cover_xxx.png" alt="封面">
<!-- 摘要(可选,第一个灰色段落) -->
<p style="color:#888; font-size:14px;">摘要文字</p>
<!-- 正文段落 -->
<div class="article-body">
<p>正文内容...</p>
</div>
auto-upload-tool/
├── SKILL.md # 本文件
├── scripts/
│ └── publish-wechat.js # 发布脚本(14步完整流程)
└── references/
└── workflow.md # 流程图 + 常见注意事项
共 1 个版本