一、前言
因为每天晚上十点钟要求在易班中的一个轻应用进行校区定位打卡,但是只有一个小时,这个时间点作为和舍友快乐五排的时间,总是忘记打卡。因此就想着做一个自动打卡的,挂载在云函数中,也不需要单独的服务器,每天定时运行,岂不是美滋滋。
二、发现问题
首先,这个易班是一个手机APP,但是我在电脑网页端查看了易班官网,发现就算是登录后依然不能进行打卡相关操作,所以只能把目标再次转回到手机APP中,利用手机的HttpCanary对其进行了抓包。但是呢,因为高版本安卓手机的整数问题,打开抓包APP都不能登陆。轻应用在易班中呈现一种站内链接跳转的方式,因此,决定先关闭抓包,进入APP,在直接点击进入打卡的链接跳转,毕竟只用获取到用于post打卡信息的url即可,最后发现先进入所有打卡列表的页面,再进行抓包是可行的。
通过抓包之后,获取到了post打卡信息的url,发现请求头中有一个Authorization的验证,是一个加密信息。
于是对authorization加密信息进行base64的解密,解密完发现这个东西由三部分组成,前两部分只进行了base64加密,第三部分应该是还有别的加密。base64解码后显示是乱码。
看来这条路是行不通的。但是,经过试验,发现了打卡的轻应用在“我的”页面中是可以点击退出登录的,就去点了一下,结果跳出了登录界面,通过复制链接,发现电脑是可以打开这个登陆页面的,因为平时这个都是app内应用,所以是没有登陆的,看不到登录页面。
那么有了登陆页面就很简单了啊,通过浏览器登陆并抓包发现,登陆成功后,有一个Ajax请求的返回信息正好是携带了token,而且跟前面的请求头中的authorration格式是一样的。
发现这个就很简单了,只要先对这个Ajax发起post拿到token,在用这个token取进行打卡就行了。
然后点到post表单,发现登陆的密码是加密的。查看后应该是一个MD5的加密,进行一个小小的逆向就可以拿到加密方法了。
做完这一步骤以后,又发现打卡的时候post的url,后面携带了一个叫做ID的东西。
最后返回去之后,抓包发现获取打卡列表的时候,响应值中打卡列表中每一个打卡都有一个对应的ID,就是打卡的时候post携带的ID。
那么,做完以上的所有操作,就知道了代码实现的流程了,首先利用逆向出的加密方法进行模拟登陆,获取Ajax响应结果中的token,使用token请求获取打卡列表中对应今天的打卡ID,利用获取到的打卡ID进行打卡操作。
三、代码操作流程
用到的库文件
1 import execjs
2 import requests
3 import time
4 from multiprocessing.dummy import Pool
来源:https://www.cnblogs.com/yuanfang0w0/p/15776277.html
图文来源于网络,如有侵权请联系删除。