微信公众号发布工具
自动化发布内容到微信公众号, 支持图文和文章两种模式。
使用方法
图文发表 (多图配文)
# 从 markdown 文件和图片目录生成
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
# 使用明确的参数
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img1.png --image img2.png --submit
# 仅预览不保存
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
文章发表 (完整 Markdown)
# 发布 markdown 文章 (默认主题)
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md
# 指定主题
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --theme grace
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --theme simple
# 覆盖标题和作者
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --title "自定义标题" --author "作者名"
说明: ${SKILL_DIR} 代表本技能的安装目录, Agent 会在运行时替换为实际路径。
参数说明
图文发表参数
--markdown <path>
指定 Markdown 文件路径, 自动提取标题和内容。
参数类型: 文件路径 (可选)
功能说明:
- •解析 frontmatter 获取标题和作者
- •如果没有 frontmatter, 使用第一个 H1 标题
- •提取首段作为内容 (最多 1000 字)
- •标题超过 20 字时自动压缩
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown ./article.md --images ./pics/
Markdown 格式:
--- title: 文章标题 author: 作者名 --- # 这是标题 (如果没有 frontmatter) 这是首段内容, 会被提取为图文内容...
最佳实践:
- •使用 frontmatter 明确指定标题和作者
- •首段内容应简洁有力, 吸引读者
- •标题控制在 20 字以内避免压缩
--images <dir>
指定图片目录, 上传目录中所有图片。
参数类型: 目录路径 (可选)
功能说明:
- •上传目录中所有 PNG/JPG 文件
- •按文件名字母顺序排序
- •最多支持 9 张图片 (微信限制)
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
最佳实践:
- •使用数字前缀命名:
01-cover.png,02-content.png - •确保图片清晰度适合移动端查看
- •控制图片数量在 9 张以内
--title <text>
直接指定文章标题。
参数类型: 字符串 (可选)
限制: 最多 20 字, 超出自动压缩
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "如何提升效率" --content "内容..." --image cover.png
压缩规则:
- •原始: "如何在一天内彻底重塑你的人生"
- •压缩: "一天内重塑你的人生"
最佳实践:
- •标题简洁有力, 突出核心价值
- •避免冗余词汇 (如何、怎样等)
- •使用数字和动词增强吸引力
--content <text>
直接指定文章内容。
参数类型: 字符串 (可选)
限制: 最多 1000 字, 超出自动压缩
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "这是内容..." --image img.png
最佳实践:
- •内容应简洁明了, 引导用户点击查看
- •突出文章核心价值和亮点
- •控制在 1000 字以内避免压缩
--image <path>
指定单个图片文件, 可重复使用添加多张图片。
参数类型: 文件路径 (可选, 可重复)
限制: 最多 9 张图片
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img1.png --image img2.png --image img3.png
最佳实践:
- •第一张图片作为封面, 应最具吸引力
- •图片顺序影响展示效果
- •确保图片格式为 PNG 或 JPG
--submit
保存为草稿, 默认仅预览不保存。
参数类型: 布尔标志 (可选)
默认行为: 不保存, 仅预览
使用场景:
- •确认内容无误后再添加此参数保存
- •批量发布时使用
使用示例:
# 仅预览
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./pics/
# 保存为草稿
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./pics/ --submit
注意事项:
- •保存后需要在微信公众号后台手动发布
- •建议先预览确认无误再保存
--profile <dir>
指定 Chrome 配置文件目录, 保持登录状态。
参数类型: 目录路径 (可选)
默认行为: 使用临时配置文件
使用场景:
- •避免每次都需要扫码登录
- •多账号管理
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./pics/ --profile ~/.chrome-wechat
最佳实践:
- •为不同公众号账号创建不同的配置文件目录
- •定期清理配置文件避免占用过多空间
文章发表参数
--markdown <path>
指定要转换和发布的 Markdown 文件。
参数类型: 文件路径 (必需)
功能说明:
- •完整解析 Markdown 格式
- •保留标题、列表、引用、代码块等样式
- •自动处理图片占位符和替换
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md
支持的 Markdown 语法:
- •标题:
#,##,### - •粗体:
**text** - •斜体:
*text* - •列表:
-,1. - •引用:
> - •代码块:
``` - •链接:
[text](url) - •图片:

最佳实践:
- •使用标准 Markdown 语法
- •图片使用相对路径
- •避免使用过于复杂的嵌套结构
--theme <name>
指定文章主题样式。
参数类型: 字符串 (可选)
可选值:
- •
default- 默认主题, 简洁大方 - •
grace- 优雅主题, 适合正式内容 - •
simple- 极简主题, 突出内容本身
默认值: default
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --theme grace
主题特点:
| 主题 | 适用场景 | 特点 |
|---|---|---|
| default | 通用内容 | 平衡美观和可读性 |
| grace | 正式文章、专业内容 | 优雅排版, 强调层次 |
| simple | 技术文档、教程 | 极简风格, 突出内容 |
最佳实践:
- •技术文章推荐 simple
- •品牌内容推荐 grace
- •日常内容使用 default
--title <text>
覆盖从 Markdown 提取的标题。
参数类型: 字符串 (可选)
默认行为: 从 Markdown frontmatter 或 H1 提取
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --title "自定义标题"
使用场景:
- •Markdown 文件没有标题
- •需要使用不同于文件中的标题
- •针对不同平台使用不同标题
--author <name>
指定文章作者名。
参数类型: 字符串 (可选)
默认值: 宝玉
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --author "张三"
最佳实践:
- •使用真实作者名增强可信度
- •团队账号可使用团队名称
--summary <text>
指定文章摘要。
参数类型: 字符串 (可选)
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown article.md --summary "这是一篇关于..."
最佳实践:
- •摘要应简洁明了, 概括文章核心
- •控制在 100 字以内
- •突出文章价值和亮点
--html <path>
使用预渲染的 HTML 文件替代 Markdown。
参数类型: 文件路径 (可选)
使用场景:
- •已有渲染好的 HTML 内容
- •需要使用自定义样式
- •复杂排版需求
使用示例:
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --html article.html
注意事项:
- •HTML 需要符合微信公众号编辑器要求
- •图片仍需使用占位符处理
--profile <dir>
指定 Chrome 配置文件目录。
参数类型: 目录路径 (可选)
功能: 与图文发表的 --profile 参数相同
功能对比
| 功能 | 图文发表 | 文章发表 |
|---|---|---|
| 多图支持 | 支持 (最多 9 张) | 支持 (内联图片) |
| Markdown 支持 | 标题/内容提取 | 完整格式化 |
| 自动标题压缩 | 支持 (压缩到 20 字) | 不支持 |
| 内容压缩 | 支持 (压缩到 1000 字) | 不支持 |
| 主题支持 | 不支持 | 支持 (default, grace, simple) |
| 适用场景 | 快速发布多图内容 | 长文章、技术文档 |
工作流程
图文发表流程
- •
解析内容:
- •从 Markdown 文件提取标题和内容
- •或使用 --title 和 --content 直接指定
- •
处理图片:
- •从 --images 目录读取所有图片
- •或使用多个 --image 参数指定图片
- •按文件名排序
- •
自动化发布:
- •打开 Chrome 浏览器
- •导航到微信公众号图文编辑器
- •上传所有图片
- •填充标题和内容
- •根据 --submit 参数决定是否保存
- •
输出结果:
- •报告发布状态
- •显示图片数量
- •提示后续操作
文章发表流程
- •
解析 Markdown:
- •读取 Markdown 文件
- •提取标题、作者等元数据
- •识别所有图片引用
- •
生成 HTML:
- •将 Markdown 转换为 HTML
- •应用选定的主题样式
- •图片替换为占位符
[[IMAGE_PLACEHOLDER_N]]
- •
自动化发布:
- •打开 Chrome 浏览器
- •导航到微信公众号文章编辑器
- •粘贴 HTML 内容到编辑器
- •
替换图片:
- •对每个占位符:
- •查找并选中占位符文本
- •滚动到可见区域
- •按 Backspace 删除占位符
- •从剪贴板粘贴图片
- •对每个占位符:
- •
输出结果:
- •报告发布状态
- •显示图片数量
- •提示后续操作
前置要求
- •已安装 Google Chrome
- •
bun运行时 (通过npx -y bun自动安装) - •首次运行需要在打开的浏览器窗口中登录微信公众号
常见问题
登录相关
问题: 每次运行都需要扫码登录
解决方案: 使用 --profile 参数指定配置文件目录
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./pics/ --profile ~/.chrome-wechat
问题: 登录后立即退出
解决方案:
- •检查网络连接
- •确保微信公众号账号状态正常
- •尝试清除配置文件重新登录
图片相关
问题: 图片上传失败
解决方案:
- •检查图片格式 (仅支持 PNG/JPG)
- •检查图片大小 (建议小于 5MB)
- •确保图片路径正确
问题: 图片顺序错误
解决方案:
- •使用数字前缀命名:
01-,02-,03- - •或使用多个 --image 参数按顺序指定
内容相关
问题: 标题被压缩
解决方案:
- •标题控制在 20 字以内
- •或手动编辑压缩后的标题
问题: 内容被压缩
解决方案:
- •内容控制在 1000 字以内
- •或使用文章发表模式发布完整内容
浏览器相关
问题: 找不到 Chrome
解决方案: 设置环境变量
export WECHAT_BROWSER_CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
问题: 粘贴失败
解决方案:
- •检查系统剪贴板权限
- •确保 Chrome 有权限访问剪贴板
- •macOS 需要在系统设置中授予权限
脚本参考
所有脚本位于本技能的 scripts/ 子目录中。
Agent 执行说明:
- •确定此 SKILL.md 文件的目录路径为
SKILL_DIR - •脚本路径 =
${SKILL_DIR}/scripts/<script-name>.ts - •将文档中所有
${SKILL_DIR}替换为实际路径
可用脚本:
| 脚本 | 用途 | 说明 |
|---|---|---|
wechat-browser.ts | 图文发表 | 多图配文模式 |
wechat-article.ts | 文章发表 | 完整 Markdown 格式 |
md-to-wechat.ts | Markdown 转换 | 转换为微信 HTML |
copy-to-clipboard.ts | 剪贴板操作 | 复制内容到剪贴板 |
paste-from-clipboard.ts | 粘贴操作 | 发送真实粘贴按键 |
使用示例
示例 1: 快速发布图文
# 场景: 有一篇 markdown 文章和一个图片目录
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown ./article.md --images ./xhs-images/
# 执行流程:
# 1. 解析 markdown 元数据:
# - 标题: "如何在一天内彻底重塑你的人生" → "一天内重塑你的人生"
# - 作者: 从 frontmatter 或使用默认值
# 2. 从首段提取内容
# 3. 在 xhs-images/ 中找到 7 张图片
# 4. 打开 Chrome, 导航到微信"图文"编辑器
# 5. 上传所有图片
# 6. 填充标题和内容
# 7. 报告: "图文已发布, 包含 7 张图片。"
示例 2: 发布完整文章
# 场景: 发布一篇技术文章, 使用 simple 主题
npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --markdown ./tech-article.md --theme simple
# 执行流程:
# 1. 解析 markdown, 找到 5 张图片
# 2. 生成带占位符的 HTML
# 3. 打开 Chrome, 导航到微信编辑器
# 4. 粘贴 HTML 内容
# 5. 对每张图片:
# - 选中 [[IMAGE_PLACEHOLDER_1]]
# - 滚动到可见区域
# - 按 Backspace 删除
# - 粘贴图片
# 6. 报告: "文章已编排, 包含 5 张图片。"
示例 3: 批量发布
# 场景: 批量发布多篇文章
for file in articles/*.md; do
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts \
--markdown "$file" \
--images "images/$(basename $file .md)/" \
--submit \
--profile ~/.chrome-wechat
done
示例 4: 自定义参数发布
# 场景: 完全自定义标题、内容和图片
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts \
--title "2024 年度总结" \
--content "回顾这一年的成长与收获..." \
--image cover.png \
--image chart1.png \
--image chart2.png \
--submit
扩展支持
通过 EXTEND.md 自定义配置。
检查路径 (优先级顺序):
- •
.pw-skills/pw-post-to-wechat/EXTEND.md(项目级) - •
~/.pw-skills/pw-post-to-wechat/EXTEND.md(用户级)
如果找到, 在工作流之前加载。扩展内容会覆盖默认值。
参考文档
- •图文发表: 查看
references/image-text-posting.md了解详细的图文发表指南 - •文章发表: 查看
references/article-posting.md了解详细的文章发表指南
注意事项
- •图文发表标题最多 20 字, 内容最多 1000 字
- •图片最多 9 张 (微信限制)
- •首次运行需要扫码登录
- •使用 --profile 参数可以保持登录状态
- •建议先预览确认无误再使用 --submit 保存
- •文章发表支持完整 Markdown 格式
- •图片处理需要系统剪贴板权限
- •macOS 需要在系统设置中授予 Chrome 剪贴板权限