背景
之前在家里部署了 we-mp-rss,用来订阅公众号文章。它有个比较麻烦的问题:每隔 80 小时左右需要重新授权一次,也就是重新打开二维码,用微信扫码登录。
我经常因为懒得扫码导致订阅不可用,所以想把这件事自动化掉。刚好家里有几台不用的旧手机,mac mini 也一直开着,就可以让电脑定时控制两台手机完成扫码。
这里没有用微信辅助服务,主要是担心触发微信风控。最后选择直接用 adb tap 模拟点击,流程更笨一点,但不需要在微信里开额外权限。
于是提需求给 Codex 搭了个项目,一次就出了基本能跑的版本。后面又对话调整了两三次,主要是补稳定性和文档。整个过程差不多两个多小时,用 AI 做这种小自动化确实很快。
项目地址:https://github.com/seewhyme/we-mp-auto-scan
整体方案
整个流程需要两台安卓设备:
- 展示设备:打开 we-mp-rss 生成的登录二维码。
- 扫码设备:打开微信扫一扫,对准展示设备上的二维码并确认登录。
电脑负责调度这两台设备。脚本先调用 WERSS API 获取登录二维码,再用 ADB 唤醒展示设备并打开二维码链接。二维码准备好之后,再唤醒扫码设备,打开微信扫一扫,点击确认。
这套方案不追求优雅,主要目标是稳定。两台手机的位置固定好之后,每次只要按同样的坐标点击就行。
踩到的坑
最开始有个问题比较迷惑:二维码链接一直返回 404。我一开始以为是 we-mp-rss 生成二维码慢,后来排查 header 才发现是 Cloudflare cache 的问题。
我用 Cloudflare Tunnel 做代理,二维码图片的响应被缓存了,导致脚本一直读到旧的 404。最后在 Cloudflare 里加规则,禁用二维码图片路径的缓存,问题就解决了。
另一个坑是手机位置。扫码设备和展示设备只要角度偏一点,就可能扫不到码。所以最后我把两台手机固定在支架上,脚本里也给关键步骤留了更长的等待时间。
运行情况
这套方案已经跑了 4 个多月,整体还算稳定。中间失败过三四次,主要原因都是不小心移动了手机位置,导致扫码设备对不准二维码。
只要设备位置固定,微信保持登录,mac mini 和两台手机都在线,基本不用管。失败时看 pm2 logs 也比较容易判断卡在哪一步。
硬件与环境准备
- 一台常开的电脑或服务器,我这里用的是 mac mini。
- Android SDK Platform Tools,保证
adb能直接执行。 - 两台安卓设备,一台展示二维码,一台登录微信负责扫码。
- 一个能固定两台设备角度的支架。
- 稳定的局域网连接。
落地步骤
- 克隆项目并安装依赖:
npm install - 复制
.env.example为.env,填入 API 地址、账号密码、设备序列号及按钮坐标。 npm run build编译 TypeScript,生成dist/index.js。- 手动运行
npm start验证流程是否通畅,必要时调整坐标或解锁手势。 - 部署 PM2 计划任务:bash
npm run build pm2 start ecosystem.config.js - 通过
pm2 logs we-mp-auto-scan观察第一次执行是否按预期完成。