微信 【接龙管家】 自动打卡

2,266 阅读3分钟

由于疫情原因,幼儿园要求每天健康码打卡,每天都需要花时间重复这个动作,作为程序员,这肯定是不能容忍的,必须脚本安排起!

jielongcheckin.png

抓包分析API

首先我们需要做的就是抓包,提取API接口,有两种方式,一种是PC微信 + Fiddler,还有一种就是直接手机抓取,手机需要安装Http Canary,这是付费软件,当然也有破解版。

我这里就采用第一种方式了,Fiddler使用的是果壳破解版,下面就讲一下过程中遇到的问题。

  1. 首先Fiddler抓取微信小程序,刚开始无法抓取,在网上搜了很多文章,发现问题出在微信小程序上,微信修改了框架导致的。

  2. 然后是上传图片到OBS的问题:

    1. 虽然上在options中指定了host,但在headers中还是必须再加上Host
    2. 需要手动指定boundaryContent-Length
    {
        host: "obs.jielong.co",
    	headers: {
        	Host: "obs.jielong.co",
        	"Content-Length": await replaceCb2promise(form.getLength.bind(form), [])[1],
        	'Content-Type': 'multipart/form-data; boundary=' + form.getBoundary(),
    	},
    	body: form,
    }
    
  3. 接着就是提交打卡记录,需要注意的是:

    1. 提交时需要添加Authorization
    2. Content-Type需要修改为application/json

接口分析其实是很简单的,结合以上需要规避的问题,基本上写自动化脚本就没啥问题了。

自动生成每日打卡截图

提交接口没问题了,打卡需要健康码截图,这里我就稍微偷了个懒,没有直接使用每日的健康码截图,而是将健康码截图后使用ps抹去了日期相关的信息,然后通过程序对图片写入响应日期信息。

整个脚本程序我使用tinyhttp写的,TS在处理图片方面还是比较麻烦,只能借用第三方库来处理,这里推荐两个库jimpnode-images,这里我采用的是jimp,需要说明的是在图片上生成日期的时候,jimp不支持丰富的样式,只能简单的字体。设置稍微复杂一点的文字就不行,比如字体颜色,不同字体大小等。这里我借助了其他人写的脚本来实现的。

先说下这个脚本的思路:

  1. 先创建透明图片,在图片上写入字体

  2. 用需要的颜色替换掉图片中字体的颜色

  3. 再将图片叠加到需要做水印的图片上

  4. 我在脚本源代码的基础上做了些许修改以适应通用场景

  5. 调用

    serviceGenImage(path.join(__dirname, "images/owner.png"))
    

定时框架

脚本有了,健康码截图也有了,然后就是解放每日双手,程序自动运行,定时打卡了,ts下也有定时任务框架:cronsilkyTimer,相关对而言silkyTimer更符合我的口味,但是该框架还在测试阶段,稳定性不够。所以就选择了已经很成熟、稳定的corn,配置也很简单,就是个java下的corn一模一样,直接移植过来的,就不多介绍了。