这个周末,我终于用低成本干成了一件想了六年的事:让 AI 替我把文章自动发到五个平台。知乎回答、微博、头条号、百家号、公众号,全程我就在旁边说要求,完全没动手。这篇把技术实现拆开说说,希望能帮大家少走我踩过的所有坑。

浏览器遥控器 + AI大脑

要自动化发文章,绕不开一件事:你得让程序能操作一个真实的浏览器。我选的是 CDP(Chrome DevTools Protocol)——Chrome 原生调试协议,通过 WebSocket 直连,能控制导航、点击、输入、执行 JS、截图,几乎浏览器能干的事它都能干。

我把它包成了一个 REST API 服务(qwen 帮我用 Go 写的,取了易这个字,叫 easybrowser),暴露 52 个 API 操作。命令长这样:

# 打开知乎curl -X POST http://127.0.0.1:58081/api/tool/browser_navigate -d '{"url":"https://www.zhihu.com"}'# 看页面长什么样(返回带 ref 的可访问性树)curl -X POST http://127.0.0.1:58081/api/tool/browser_snapshot_ax -d '{"mode":"compact"}'# 点一个按钮(ref 来自快照)curl -X POST http://127.0.0.1:58081/api/tool/browser_click -d '{"ref":"e12"}'

按用途分,这 52 个操作大致是六类:

  • 感知:看页面长什么样——AX 树快照(带稳定 ref)、DOM 快照、可见元素快照、截图、读元素文本和属性、取 URL 和标题、判断元素可见/可用、数一数有几个匹配元素
  • 点操作:点击、双击、填输入框、按键(含 Ctrl+A 这种组合键)、选下拉框、勾复选框、滚动、悬停、拖拽、上传文件
  • 坐标级兜底:ref 拿不到时按坐标干活——单击、双击、移动鼠标、滚动、拖拽路径、聚焦输入
  • JS 直连:直接执行任意 JavaScript、用 JS 点击/填表、调底层 CDP 接口
  • 导航与 Tab:前进、后退、刷新、开新标签页、列标签、切换、收养、关闭
  • 等待与旁路:等元素出现、等 URL 变化、等固定时长、读剪贴板、取控制台日志、下载媒体文件

一共 52 个,基本覆盖了我在浏览器里手动能干的所有事。我配的这套 api 不是抓包来的,是照着人类操作浏览器的习惯,参考openai的browseruse,个性化拆出来的。这是服务真实跑起来的接口列表:

打开网易新闻 查看精彩图片

AI 大脑负责看快照、决定点哪、填什么。它不用直接碰浏览器,只调用这个 REST API。这么一层拆开的好处是:换个 AI,底座不用动,一些纯程序实现的 RPA 工作不用动,而且可以复用我真实的登录状态,不用费劲绕开验证码。

关键一:复用真实登录态,规避反爬

这是我整个方案的地基,也决定了为什么不用 Selenium 和 Playwright。Selenium 起的是全新浏览器,没的登录态,过不了验证码,过不了风控。

我的做法:Chrome 以 启动,跑在真实显示器上,我在里面正常登录一遍,之后所有平台都「已登录」。CDP 直连这个 Chrome,平台风控看你就是看真人——指纹、Cookie、UA、行为全部一致。知乎那种恶心至极的反爬,对我这条路没啥效果。

--remote-debugging-port=9222

关键二:AI 怎么看页面、点按钮

浏览器操作最难的,不是执行点击,是告诉 AI 该点哪个。我的方案是三层递进:

  1. AX 树快照(主路径):把页面转成带稳定 ref 的可访问性树,。AI 直接引用 ref 点击,不依赖脆弱的 CSS 选择器
  2. e1、e2、e3…
  3. DOM 快照兜底:AX 树覆盖不到的复杂页面,退到 DOM 行文本
  4. 坐标点击:ref 都拿不到时,直接用坐标点

为了防「AI 反复截图同一页卡死」,还加了个硬切换:连续两次快照结构没变化,强制切到 DOM 路径。

关键三:富文本编辑器怎么灌内容(全案最难)

知乎、公众号的编辑器是 Draft.js 这类 React 富文本组件,普通的模拟键盘输入根本灌不进去。格式全乱,图片粘不进去。我踩出来的正确姿势是「剪贴板桥接」:

  1. Markdown 转成 HTML,有个细节:纯图片段落要解包成 ,否则图片上下会多出空行
  1. 用 把 HTML 塞进系统剪贴板,指定 MIME 类型 (DISPLAY 指向真实显示器)
  2. xclip
  3. text/html
  4. 模拟浏览器级全选、粘贴——必须用 CDP 的 的 类型。用普通的 不会触发浏览器级快捷键,Ctrl+A、Ctrl+V 全部失灵
  5. Input.dispatchKeyEvent
  6. rawKeyDown
  7. keyDown
  8. Draft.js 的 自动把剪贴板 HTML 渲染成富文本,标题、加粗、图片原样保留
  9. convertFromHTML

就这么几个细节,我让 DS flash 调了两个小时。如果早知道 和 的区别,就省掉一半调试时间。

rawKeyDown

keyDown

关键四:各平台的坑(踩坑实录)

知乎:专栏 API 用浏览器 fetch 跨域调用,被 CORS 拦死(),但是专栏没有意义,没有流量。我的正确路线是「回答模式」——在真实浏览器里搜索到相关的问题,选择热度最高最匹配的问题,然后 AI 打开问题页,粘贴 HTML,点发布。

Failed to fetch

微博:文章编辑器是 SPA,用 fetch 抓 HTML 拿不到用户信息——要直接用 JS 从页面 DOM 里提取 uid。另一个坑:草稿保存接口只收 ,发 JSON 会返回「参数错误」。就这一个格式问题,能让整篇内容存不进草稿箱。

form-urlencoded

头条号 / 百家号:有官方内容发布接口,图片走各自的上传通道,直接提交审核。这俩是最省心的。

微博的普通动态:长文没人点开,把文章用 PIL 渲染成排版长图(1080px,Noto CJK,章节切分),先发一条全文微博,再逐章发带精华和章节图的引用微博,间隔 15 分钟。这个流程我从 2020 年 2 月就在想,那时候还在用各种 RPA 工具,全都实现不了,这次终于如愿了。

LLM 的角色:不是写代码,是当脑子

这套系统里 LLM 不写代码,它做四件事:从文章提炼搜索关键词、从候选问题里匹配最相关的、给全文和每个章节写摘要、看页面快照决定下一步点哪。

它还有个绕不开的特性:偶发返回空响应。我测了五次,两次返回空。解法是重试——所有 LLM 调用统一加三到五次重试,缩输入再试。

这里多说一句成本。开发这种类似RPA的 agent 任务是个烧 token 大户:每一步 AI 都要读整页快照,调试五个平台,烧了150万 tokens。另外执行中还是需要AI帮忙看着点,也不是能无脑靠程序执行的。

所以AI的选型就一条标准:聪明到能稳定执行,便宜到敢天天跑。我现在的主力是 DeepSeek V4 Flash(输入百万 token 一块钱)和 Qwen 3.8。贵一百倍的模型,同样的活,我的钱包先撑不住了。

六年愿望的成功

知乎回答也已经发出去了,匹配的是热度最高、跟文章最相关的问题:

打开网易新闻 查看精彩图片

头条号、百家号的内容管理里,文章都在「已发布」列表里躺着:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

微博主页上,8 条图文序列已经挂出来了,先全文、后逐章引用:

打开网易新闻 查看精彩图片

发布追踪库是 SQLite,每次发布自动记一条,cron 每六小时刷阅读量:

打开网易新闻 查看精彩图片

结尾:技术价值 vs 商业价值

这套东西对我来说最大的价值不是省那四十五分钟,是第一次用不到 20 块钱的 API 成本,实现了想了好几年,而且几百块一年 SaaS 都做不到的体验。我只负责登录和下指示,剩下全靠AI干活。

浏览器自动化这个方向,过去被 Playwright、Selenium 和各类 RPA 工具占据了,但它们都解决不了一个根本问题:没有登录态,而且对大模型不友好,我前几年玩selenium也搞不定很多想法啊。

而 CDP 直连真实浏览器,把「登录」这个最难的问题,用最简单的方式绕了过去。然后让AI能够用执行命令行的方式操作浏览器,剩下的,就可以交给足够聪明、足够便宜的模型了。AI是真的会帮你探测到后端接口,然后直接调接口完成很多重复的活儿了。

技术栈清单:Go(CDP 服务)· Python(发布脚本)· PIL(长图渲染)· SQLite(追踪)· cron(定时)· DeepSeek V4 Flash / Qwen 3.8(AI 大脑)。如果你也有一堆重复的网页操作想甩给 AI,这条路,值得走。