首页 / 全部技能 / 内容创作 / baoyu-post-to-weibo
内容创作 · JimLiu/baoyu-skills

baoyu-post-to-weibo

Posts content to Weibo (微博). Supports regular posts with text, images, and videos, and headline articles (头条文章) with Markdown input via Chrome CDP. Use when user asks to "post to Weibo", "发微博", "发布微博", "publish to Weibo", "share on Weibo", "写微博", or "微博头条文章".

L5 严管 · 隔离环境与严格审计V2 已复核逆向接口条款/合规凭据/登录态执行命令外部写入联网读写文件Dual-pass Audit
Author JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926License MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API spdx_id=MIT)Commit 1567581c26
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

1实现原理 · 为什么它能做到

实现路线是驱动本机真实 Chrome:找 Chrome 可执行文件 → 起带调试端口的实例(独立 profile)→ 等调试端口就绪 → 连 CDP WebSocket → attach 到目标页。

skills/baoyu-post-to-weibo/scripts/weibo-utils.ts
export async function launchChrome(url: string, profileDir: string, chromePathOverride?: string): Promise<number> {
不做 HTTP 层逆向、不构造私有 API 请求;一切操作都发生在真实浏览器页面里(这也是它能绕过平台反自动化检测的前提)。

反自动化检测绕过是本 skill 的显式设计:SKILL.md 首段就把它写成卖点,代码里则关闭 Chrome 的自动化特征标记。

skills/baoyu-post-to-weibo/scripts/weibo-utils.ts
extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],
SKILL.md 原文:`Posts text, images, videos, and long-form articles to Weibo via real Chrome browser (bypasses anti-bot detection).`——技术性绕过平台自动化侦测,是本 skill 判红的主因。

内容注入的第一手段是『真实按键粘贴』而非合成事件,理由被明写在脚本用途里:网站能检测并忽略 CDP 合成事件。

skills/baoyu-post-to-weibo/scripts/paste-from-clipboard.ts
This bypasses CDP's synthetic events which websites can detect and ignore.
调用链:weibo-utils.ts 的 copyHtmlToClipboard/copyImageToClipboard 以 `spawnSync('npx', ['-y', 'bun', scriptPath, ...args])` 调起 copy-to-clipboard.ts,再用 pasteFromClipboard → paste-from-clipboard.ts 发真实 Cmd+V/Ctrl+V(macOS 走 osascript System Events,Linux 走 xdotool/ydotool,Windows 走 PowerShell SendKeys)。weibo-article.ts 里 `// Method 1: Copy HTML to system clipboard, then real paste keystroke` 而 CDP 合成事件只作为 fallback。

普通微博的文本输入用 CDP Input.insertText,失败回退 execCommand;媒体上传直接把文件路径塞给页面 file input,再按 blob:/data: 计数校验。

skills/baoyu-post-to-weibo/scripts/weibo-post.ts
await cdp.send('Input.insertText', { text }, { sessionId });
上传用 `DOM.setFileInputFiles` 指向 `#homeWrap input[type="file"]`;校验表达式统计 `#homeWrap img[src^="blob:"], #homeWrap img[src^="data:"], #homeWrap video` 的数量,最多 18 个文件(MAX_FILES = 18)。

头条文章走 card.weibo.com 的 ProseMirror 编辑器:填标题/导语 → 粘贴 HTML → 逐图『复制图片 + 真实粘贴键』替换占位符 → 校验剩余占位符与图片数。

skills/baoyu-post-to-weibo/scripts/weibo-article.ts
// Method 1: Copy HTML to system clipboard, then real paste keystroke
编辑器入口常量 `const WEIBO_ARTICLE_URL = 'https://card.weibo.com/article/v3/editor';`;图片替换循环里也是 copyImageToClipboard → pasteFromClipboard('Google Chrome', 5, 1000)。

平台字数限制被硬编码并自动处理:标题 32 字符、导语 44 字符,超长按标点边界截断或从正文重生成。

skills/baoyu-post-to-weibo/scripts/weibo-article.ts
const TITLE_MAX_LENGTH = 32;
同文件 `const SUMMARY_MAX_LENGTH = 44;`;超长导语用 parsed.shortSummary 重新生成,否则截断加省略号。

会接管/复用已在运行的调试 Chrome:按 profile 目录 + --remote-debugging-port 在进程列表里匹配,必要时只终止自己这套 profile 的实例。

skills/baoyu-post-to-weibo/scripts/weibo-utils.ts
if (!line.includes(profileDir) || !line.includes('--remote-debugging-port=')) continue;
killChromeByProfile 用 `spawnSync('ps', ['aux'])` 找进程再 `process.kill(Number(pid), 'SIGTERM')`;SKILL.md 就此写了一条 CRITICAL 纪律:`Only kill Chrome instances launched by CDP with the baoyu-skills profile directory.`(禁止 pkill 掉用户全部 Chrome)。

登录态来自持久 Chrome profile,首次需人工登录一次后长期复用;且脚本只负责把内容填进页面,发布由用户手动确认。

skills/baoyu-post-to-weibo/SKILL.md
All scripts only fill content into the browser, user must review and publish manually
SKILL.md 另一处:`First run: log in to Weibo manually (session saved)`——session 落在 profile 目录里的 cookie/存储,是典型的『复用已登录浏览器会话』模式(凭证面来源)。

2核心能力

01普通微博发布(文本 + 图片/视频,最多 18 个文件)
02头条文章发布(Markdown → HTML → ProseMirror 编辑器,支持 frontmatter title/summary/cover_image)
03标题/导语长度合规(32/44 字符)与超长自动截断或重生成
04图片占位符替换 + 发布前自检(剩余 WBIMGPH_ 占位符与预期图片数比对)
05跨平台剪贴板与按键注入(macOS swift/osascript、Linux wl-copy/xclip + xdotool/ydotool、Windows PowerShell)
06调试 Chrome 复用与按 profile 精准清理(不误杀用户日常 Chrome)
07复用已有登录态(EXTEND.md 可配默认 Chrome profile),免重复扫码

3外部依赖

KindDependency / Endpoint
network浏览器访问 weibo.com 与 card.weibo.com(发帖与头条文章编辑器)
network头条文章编辑器入口
cli本地 Chrome/Chromium(--remote-debugging-port + --user-data-dir,带 AutomationControlled 关闭参数)
cli粘贴按键注入工具(macOS osascript / Linux xdotool 或 ydotool / Windows powershell.exe)
cli剪贴板工具(macOS swift 临时脚本 / Linux wl-copy 或 xclip / Windows PowerShell)
clips(进程枚举,用于复用/清理调试 Chrome)
packagebaoyu-chrome-cdp(npm,仓库 packages/ 内共享包:CDP 连接、Chrome 查找与启动、按键/剪贴板基础件)
packagebaoyu-md(npm,仓库 packages/ 内共享包:Markdown → HTML,供头条文章使用)
clibun(内部以 npx -y bun 调起同目录辅助脚本)

4管控建议与判定依据

建议配套管控措施
面向 Agent
隔离环境,逐次授权
面向管理者
严格授权、全量审计、合规确认
判定依据(文件路径与关键语句摘要)
  • SKILL.md / 脚本: 调用未公开或逆向工程的私有 API / 伪造客户端标识
  • SKILL.md / 脚本参数: 包含绕过自动化检测、关闭宿主沙箱或跳过 SSL 证书校验
  • SKILL.md / 会话存储: 读取或复用浏览器用户登录态与会话 Cookie
  • scripts/: 执行本地脚本或命令: bun {baseDir}/scripts/weibo-post.ts <text> --image/--video …
  • 外部 API: 向外部平台执行发帖、资源创建或修改写入
  • 本地工作目录: 文件读写与工件输出: Chrome profile 目录(默认 baoyu-skills/chrome-profile 体系,登录态与浏览器数据持久化)
审计说明: 。判红属『能力/策略级』,红线在本 skill 目录内且有文档自述:①【技术性反自动化检测绕过】SKILL.md 首段 `Posts text, images, videos, and long-form articles to Weibo via real Chrome browser (bypasses anti-bot detection).`;实现层 scripts/weibo-utils.ts 给 Chrome 传 `extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],`(关闭自动化特征标记,与 notebooklm-skill 判红同一手法);scripts/paste-from-clipboard.ts 自述 `This bypasses CDP's synthetic events which websites can detect and ignore.`,且 weibo-article.ts 把它当第一手段(`// Method 1: Copy HTML to system clipboard, then real paste keystroke`),CDP 合成事件只作 fallback。②【凭据/会话面】复用持久化 Chrome profile 的微博登录会话(首次人工登录后长期保存),可接管已在运行的调试 Chrome;不读任何密钥文件。③【外部副作用】以你的账号在公开平台发帖/发头条文章(脚本只填内容、由用户确认发布);另会按 profile 精确 SIGTERM 结束自己启动的调试 Chrome。收尾:无 TLS 降级、无沙箱降级(Chrome 未带 --no-sandbox)、无私有 API 逆向、无客户端冒充;红线来自反自动化检测绕过本身。

5第二遍独立确认

  • [ok] 反自动化检测绕过(判红主因) — 三处证据互相印证:SKILL.md 'bypasses anti-bot detection';weibo-utils.ts `extraArgs: ['--disable-blink-features=AutomationControlled', '--start-maximized'],`(launchChrome 传给 launchChromeBase);paste-from-clipboard.ts 'This bypasses CDP's synthetic events which websites can detect and ignore.'
  • [ok] 真实按键是第一手段而非兜底 — weibo-article.ts 注释排序为 '// Method 1: Copy HTML to system clipboard, then real paste keystroke',失败后才走 DataTransfer paste 事件;图片替换循环直接 pasteFromClipboard('Google Chrome', 5, 1000)。
  • [ok] 凭证面确认(无密钥读取,靠 profile 会话) — 全目录 process.env/API_KEY/TOKEN/SECRET/.env 扫描零命中;SKILL.md 说明登录态由 Chrome profile 持久化(First run: log in to Weibo manually (session saved)),EXTEND.md 仅支持默认 profile 一项。
  • [ok] 外部端点仅微博自家域名 — grep https:// 命中 WEIBO_HOME_URL=https://weibo.com/ 与 WEIBO_ARTICLE_URL=https://card.weibo.com/article/v3/editor,另有一处仅作日志措辞的 'src: https://...';无第三方 API/CDN。
  • [ok] 平台限制与自检 — MAX_FILES=18、TITLE_MAX_LENGTH=32、SUMMARY_MAX_LENGTH=44 均在源码;SKILL.md 的 Post-Composition Check(剩余 WBIMGPH_ 占位符、预期 vs 实际图片数)与代码校验逻辑一致。
  • [ok] 进程清理不会误杀用户浏览器 — killChromeByProfile 只对同时包含 profileDir 与 '--remote-debugging-port=' 的行取 pid 并 SIGTERM;SKILL.md 用 CRITICAL 明确禁止 `pkill -f "Google Chrome"`。
  • [ok] 无其他安全降级 — grep no-sandbox / rejectUnauthorized / --insecure / NODE_TLS_REJECT / disable-web-security 零命中;Chrome 参数仅为调试端口、profile、AutomationControlled 与最大化窗口。
  • [ok] 元数据(license/stars/commit) — git HEAD=1567581c26ec29f4216c6e6835415bf30343b0e3;仓库根 LICENSE=MIT(Copyright (c) 2026 Jim Liu);GitHub API stars=25926、pushed_at=2026-09-10T15:13:43Z。

6结论

  • 用真实浏览器完成微博这种强登录、强前端校验的发布场景,避免自建 API 客户端带来的封号与维护风险(代价是必须本机跑 Chrome)。
  • 内容注入多级兜底 + 自检:insertText/execCommand、剪贴板真实按键、DataTransfer 事件;发布前比对占位符与图片数。
  • 把平台硬限制内建在流程里:18 附件、标题 32、导语 44,超长自动截断/重生成,用户不必先撞墙。
  • 操作安全边界写得明白:只填内容不点发布(用户复核),清理进程只用 profile 精确匹配并禁止全局 pkill。
  • 跨三平台可用:剪贴板与按键在 macOS/Linux/Windows 各有实现,且提供了 Chrome 调试端口不健康时的排错指引。
  • 适合: 适合有微博账号、想把手写 Markdown 一键铺进头条文章编辑器(含封面与内文配图)的作者,或因平台限制不宜走 API 的日常发帖场景;也适合把该流程作为其他内容生产 skill 的最后一环(前提是接受其反检测手法与账号风险)。
    不适合: 不适合不合规或不愿接受平台风控风险的场景(本 skill 明含反自动化检测绕过,判红);不适合无图形界面/无 Chrome 的服务器环境;不适合需要完全无人值守发布的流水线(脚本只填内容、需用户点发布);也不适合批量养号/营销刷量用途。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload baoyu-post-to-weibo.tar.gz
    sha256: 5673e558aeace4cc…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 1567581c26.