BlogLoom Publisher Skill —— CSDN 渠道能力与发布流程
面向对象:需要了解 / 维护 / 扩展 BlogLoom 博客分发 Skill 的开发者与 AI Agent。 渠道实现目录:skills/blogloom-publisher-skill/scripts/channels/csdn/渠道 SOP:references/channels/csdn/sop.md通用契约:references/00-tool-contract.md
一、渠道概览
CSDN 是 Skill 的首个对接渠道,主操作走 Playwright(可见浏览器、真实点击/输入/粘贴),CDP 仅作底层增强(复用登录态、
Input.insertText 兜底富文本、读取 HttpOnly Cookie 判定登录)。默认有头模式,全程可见。
二、能力矩阵
test publish用于验证「发布链路可用且不残留内容」。CSDN 支持发布后回滚,故为PUBLISHED_AND_DELETED。
三、统一调用
[publisher] 前缀),便于 Agent 解析。
四、SOP 字段映射(Markdown → CSDN)
五、场景流程详解
5.1 csdn checkLogin —— 检测登录态
步骤
- 打开首页
https://www.csdn.net/; - 读取
.toolbar-btn-loginfun文案:为「登录」则未登录; - 命中「创作」入口且非登录态,或 Cookie 含
UserToken+UserInfo→ 已登录; - 同时返回是否存在滑块
.verify-move-block(data.hasSlider)。
5.2 csdn login —— 扫码登录
步骤
- 打开
https://passport.csdn.net/login(有头模式); - 用户扫码 / 输入账号完成登录(含可能的滑块验证,脚本不绕过);
- 每 2s 轮询登录 Cookie,命中
UserToken/UserInfo即成功(默认最长 10 分钟); - 登录态保存在独立 profile:
~/.blogloom-publisher/chrome-profile-csdn。
5.3 csdn publishDraft —— 保存草稿
步骤
- 进入编辑器:首页点「创作」
.toolbar-btn-write-new(失败回退直开editor.csdn.net/md/); - 填标题:先点展示态
.article-bar__title-display(【无标题】)唤出隐藏input.article-bar__title,清空后写入,回读校验; - 写正文:
- 点
.editor__inner.markdown-highlighting(<pre contenteditable>); - 全选删除默认欢迎内容;
- 按
paste → cdp → keyboard策略粘贴(剪贴板粘贴优先,CDPInput.insertText兜底); - 正文含图片时按图片数量估算等待(默认 2s,每满 5 张多 3s),确保图片异步上传完成;
- 点
- 点顶部「保存草稿」
button.btn-save→status=DRAFT_SAVED。
草稿阶段不配置标签/摘要/分类等(后续可在编辑器或发布时补)。
5.4 csdn publish —— 发布
在草稿填写基础上,点「发布文章」button.btn-publish 打开弹窗 .modal__publish-article,依次配置:
--dry-run:完成所有填写与弹窗配置,但不点最终发布,返回 status=DRY_RUN 与 publishConfig。
正式发布:点弹窗底部 .modal__button-bar button(发布文章),从成功弹窗 a.success-modal-btn[href*="/article/details/"] 取链接(去查询参数),返回 status=PUBLISHED 与 url。
5.4.1 渠道级发布配置(conf/csdn.conf)
文章的标题/标签/分类/摘要/专栏/封面来自博客顶部 SOP 元数据;下列渠道级选项来自 conf/csdn.conf,脚本执行时默认读取:
优先级:CLI 参数 > 元数据 > conf 默认。加载器见 scripts/lib/channel-conf.js。
5.5 csdn delete —— 删除博客
步骤
- 进入内容管理页
https://mp.csdn.net/mp_blog/manage/article; - 按
--id(a[href*="/article/details/<id>"])或--title定位文章行.article-list-item-mp; - 悬停该行 → 行右侧「…」
.el_mcm-dropdown .el-dropdown-link; - 下拉点「删除」
.el_mcm-dropdown-menu__item; - 二次确认弹窗点「确定」
.btn-msg-confirm; - 回查该行已从列表消失 →
DELETED,否则DELETE_UNVERIFIED。
关键:一定要点二次确认弹窗的「确定」,否则不会真正删除。
5.6 csdn test publish —— 发布 → 删除 链路自测
publish + delete:发布成功后立即按 URL/id 删除,返回 PUBLISHED_AND_DELETED,用于验证分发链路可用且不残留内容。
六、选择器对照表(channels/csdn/selectors.js)
站点改版时只改本文件,业务流程代码零改动。
七、错误码与分支
退出码:
0 成功(含 DRY_RUN)/ 1 执行异常 / 2 checkLogin 未登录或 login 超时。
八、验证与维护
--dry-run返回contentStrategy(生效的写入策略)、contentLength与publishConfig,据此判断各字段是否写入成功;test publish验证完整链路且不留残留内容;- 单测覆盖:
checkLogin / enterEditor / setTitle / setContent / preparePublish / publish / saveDraft / deleteBlog。