we-mp-rss 的自动化扫码登录方案
背景
之前在家里部署了 we-mp-rss ,用来订阅公众号文章,但是有个问题是每隔 80 小时需要重新授权,需要微信扫码登录一次,(原因是这个项目基于微信公众平台接口,cookie 80 小时过期),所以经常懒得扫码导致不可用。
想了下可以用自动化的方式去做微信登录。 刚好手上以前的旧手机也都在,并且 mac mini 平时也都一直运行, 直接做个定时任务就行。 另外看到微信可能会检测辅助服务,可能导致封号,安全起见直接使用 adb tap 来做点击,不依赖辅助服务。
于是提需求给 codex ,搭了个项目出来, 一次就出来基本能用的版本,后面再对话调整了两三次,调整了下流程和文档。 差不多两个多小时就完成整个项目,用 AI 确实快。
另外还有个坑是我用 cloudflare tunnel 来做代理,好像默认会开 cache, 导致二维码链接读到的一直是 404,要去 cloudflare 里设置规则禁用掉 二维码图片的缓存来做。
项目地址:https://github.com/seewhy163/we-mp-auto-scan
以下内容由 AI 根据项目生成
解决思路
- 通过 Node.js 脚本协调两台安卓设备(扫码设备 + 展示设备)。
- 调用 we-mp-rss 对应的 WERSS API 获取最新的登录二维码。
- 在展示设备上打开二维码链接。
- 让扫码设备唤醒微信、进入扫一扫、对准二维码并完成确认。
- 全程记录日志,失败会在终端和 PM2 中可视化。
- 利用 PM2 的 cron 每天凌晨定时执行,确保永远不会错过 48 小时限制。
实现原理
整个项目部署在一台常开的电脑或服务器上,核心分为三个部分:
1. 后端接口调用
- 使用用户名与密码向
WERSS平台登录,获得访问 token。 - 请求二维码接口
api/v1/wx/auth/qr/code,获得二维码图片地址。˛ - 轮询二维码 URL,直到服务器不再返回 404,证明二维码已经生成。
2. ADB 设备编排
- 扫码设备:唤醒屏幕、解锁、确保微信在干净状态下启动、点击“+”->“扫一扫”->“确认”->等待 20 秒后退出。
- 展示设备:唤醒并解锁后,直接用浏览器打开二维码 URL。
- 为了避免设备响应延迟导致的失败,在每条
adb指令之间随机等待 3–6 秒;关键节点(扫码页、公众号选择、确认)再加入 15 秒、5 秒、20 秒的固定等待。
3. 定时与监控
- 使用 PM2 的
cron功能,让脚本每天凌晨 02:00 自动运行。 autorestart: false让脚本在执行完成后退出,避免残留进程。- 借助
pm2 logs和pm2 status可快速查看最近一次扫码是否成功。
硬件与环境准备
- 主机:一台支持 Node.js 18+ 的电脑/服务器,建议常年开机。
- ADB 工具:已安装 Android SDK Platform Tools,并把
adb放入系统 PATH。 - 安卓设备 x2:
- 扫码设备需要安装微信并保持登录。
- 展示设备可以是任意 Android 手机/盒子,浏览器可自动打开 URL。
- 支架/定位:推荐准备支架让两台设备角度固定,扫码时更稳定。
- 网络:设备与主机需要稳定的局域网连接,以保证
adb与 API 请求畅通。
落地步骤
- 克隆项目并安装依赖:
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观察第一次执行是否按预期完成。