we-mp-rss 的自动化扫码登录方案

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 根据项目生成

解决思路

  1. 通过 Node.js 脚本协调两台安卓设备(扫码设备 + 展示设备)。
  2. 调用 we-mp-rss 对应的 WERSS API 获取最新的登录二维码。
  3. 在展示设备上打开二维码链接。
  4. 让扫码设备唤醒微信、进入扫一扫、对准二维码并完成确认。
  5. 全程记录日志,失败会在终端和 PM2 中可视化。
  6. 利用 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 logspm2 status 可快速查看最近一次扫码是否成功。

硬件与环境准备

  • 主机:一台支持 Node.js 18+ 的电脑/服务器,建议常年开机。
  • ADB 工具:已安装 Android SDK Platform Tools,并把 adb 放入系统 PATH。
  • 安卓设备 x2
    • 扫码设备需要安装微信并保持登录。
    • 展示设备可以是任意 Android 手机/盒子,浏览器可自动打开 URL。
  • 支架/定位:推荐准备支架让两台设备角度固定,扫码时更稳定。
  • 网络:设备与主机需要稳定的局域网连接,以保证 adb 与 API 请求畅通。

落地步骤

  1. 克隆项目并安装依赖:npm install
  2. 复制 .env.example.env,填入 API 地址、账号密码、设备序列号及按钮坐标。
  3. npm run build 编译 TypeScript,生成 dist/index.js
  4. 手动运行 npm start 验证流程是否通畅,必要时调整坐标或解锁手势。
  5. 部署 PM2 计划任务:
    bash
    npm run build
    pm2 start ecosystem.config.js
  6. 通过 pm2 logs we-mp-auto-scan 观察第一次执行是否按预期完成。
debian 搭建家庭服务器过程记录