当你拥有一个每天都要更新内容的技术博客,手动打开后台、写标题、传封面、填 SEO 字段、点发布,日复一日会消耗大量精力。这篇文章记录我把整个流程交给 AI Agent 自动化运行的完整实践:Agent 通过 WebRTC 远程桌面操控真实浏览器完成签到、浏览等日常任务,再通过 WordPress REST API 完成文章发布,全链路无需人工干预。
一、整体架构:两条自动化链路
整套系统由两条互补的链路组成,各司其职:
- 远程浏览器链路(GUI 层):基于 Selkies-Gaming 的 WebRTC 远程桌面,Agent 以鼠标坐标点击 + 键盘注入的方式操控云端 Edge 浏览器,负责处理必须”真人环境”的任务——每日签到、积分任务、社区浏览等。
- REST API 链路(数据层):直接调用 WordPress REST API,负责结构化数据的读写——文章正文、分类标签、特色图片、SEO 字段、发布状态。可靠、快速、可幂等重试。
两条链路的分界线非常清晰:凡是需要绕过人机验证或依赖登录态 Cookie 的走 GUI,凡是纯数据操作的全部走 API。
二、远程浏览器操控的关键细节
远程桌面自动化最大的坑在键盘注入。Selkies 的画面渲染在 canvas 上,本地合成 KeyboardEvent 不会转发到远端,唯一可靠的方式是调用其内部 API:
// 按下并释放一个键(keysym 十进制字符串)
window.webrtcInput._sendKeyEvent('116', 'id1', true); // t down
window.webrtcInput._sendKeyEvent('116', 'id1', false); // t up
// 组合键必须严格按时序:down → down → up → up
_sendKeyEvent('65507', 'm1', true); // Control down
_sendKeyEvent('97', 'm2', true); // a down
_sendKeyEvent('97', 'm2', false); // a up
_sendKeyEvent('65507', 'm1', false); // Control up
实践中沉淀出几条铁律:
- 修饰键释放必须冗余:组合键后额外补发一次 Ctrl/Shift 释放事件,否则远端 X 服务器会保持修饰键锁存,后续普通按键全部变成快捷键(Ctrl+N 开新窗口、Ctrl+Shift+N 开无痕窗口……)。
- 警惕按键自动重复:down 与 up 之间如果远端卡顿超过 500ms,X 会以约 30Hz 的频率自动重复,一行循环输入瞬间膨胀成上千字符。长文本输入务必走剪贴板。
- 导航优先用剪贴板:把 URL 写入 Selkies 侧边栏的 Server Clipboard,再右键地址栏”粘贴并转到”,比逐字符注入 URL 快十倍且不会出错。
三、REST API:发布环节的正解
WordPress 的 REST API 配合应用密码(Application Password)后,发文变成了一个 curl 的事。应用密码在 后台 → 用户 → 个人资料 底部生成,以 Basic Auth 方式携带:
# 创建文章
curl -u "user:xxxx xxxx xxxx xxxx xxxx xxxx" \
-X POST https://example.com/wp-json/wp/v2/posts \
-H "Content-Type: application/json" \
-d '{"title":"文章标题","content":"HTML 正文","status":"draft",
"categories":[56,36],"tags":[228,229]}'
# 上传特色图片(二进制直传)
curl -u "user:xxxx xxxx xxxx xxxx xxxx xxxx" \
-X POST https://example.com/wp-json/wp/v2/media \
-H "Content-Disposition: attachment; filename=cover.png" \
-H "Content-Type: image/png" \
--data-binary @cover.png
# 绑定封面并发布
curl -u "user:xxxx xxxx xxxx xxxx xxxx xxxx" \
-X POST https://example.com/wp-json/wp/v2/posts/960 \
-H "Content-Type: application/json" \
-d '{"featured_media":964,"status":"publish"}'
相比前端表单 + 滑块验证码的提交方式,API 路径没有验证码、没有会话超时、没有编辑器加载等待,稳定性高出一个量级。子比(Zibll)主题的前端发文表单虽好,但腾讯拼图验证对自动化极不友好,把发布环节整体迁到 REST API 是本次实践收益最大的决策。
四、主题私有字段的兜底方案
REST API 并非万能:主题注册的自定义分类法(如子比的专题 zib_topic)和未注册到 REST 的 postmeta(如独立 SEO 三字段)无法直接通过标准接口写入。此时有两类兜底方案:
- GUI 编辑器兜底:Agent 在 wp-admin 打开文章编辑页,定位到主题设置 metabox,通过剪贴板粘贴填入中文 SEO 标题、描述与关键词,最后点击”更新”。wp-admin 内部保存不触发验证码。
- XML-RPC 通道:若主题未完全禁用,wp.editPost 支持自定义字段写入,可作为 REST 的补充。
五、AI 封面与内容质量
封面图由文生图模型按文章主题生成(1344×768 横幅比例),本地生成后经 REST 媒体接口直传,从生成到绑定特色图片不超过一分钟。文章正文则由 LLM 按站点既有风格撰写——本站前几篇 Docker 网络排障、OpenWebUI 部署的文章结构(问题引入 → 原理拆解 → 操作步骤 → 踩坑总结)就是很好的 few-shot 模板。
六、踩坑清单
- keysym 必须用十进制字符串传给 _sendKeyEvent,传键名会静默失败;
- Edge 地址栏可接受注入的 keysym,但焦点必须在点击后立即使用,Escape 会让焦点回落到页面;
- 远程机器重启后 Edge 首启向导需要先处理,否则后续点击全部落空;
- 会话抢占:Selkies 同一时刻只允许一个主客户端,第二个客户端接入会直接杀死前一个连接;
- 分类、标签、专题、封面、SEO 五要素在发布前逐项校验,缺一项就宁可先存草稿。
结语
自动化不是把人从流程里赶走,而是把流程里”机械重复”的部分交给 Agent,把”判断与品味”留给自己。这套 双链路(GUI + API)架构 已经在真实站点上稳定运行,从签到、浏览到发文,每天早晨自动完成。下一阶段计划把失败重试、验证码人工兜底的通知也接入 IM,实现完全无人值守。











暂无评论内容