自己写一个全自动打卡器——基于问卷星
- 想必大家最近都有过这样一个经历,就是——自己明明很想睡觉但却不得不起床打卡。
有没有什么偷懒的方法 解决方案?
当然有。
偷懒是不好的,个人建议大家每天认真填写打卡,帮助控制疫情!
怎样实现?
其实思路很简单,首先我们要知道打卡的本质是什么,无非就是发送一个数据包嘛。
那我们只需用照着一个数据包的模板,每天自动发一次不就行了吗,就是这么简单。
需要什么技术?
- Python或者其他,个人推荐python。
- Fiddler抓包,只要可以抓包就可以。
- requests库,一个python库。
开始实现
第一步——抓包并分析
- 我们先随便打开一个打卡地址
假设他长这样 - 打开我们的抓包软件,这里我用的是Fiddler
建议打开过滤器,像这样:
- 开始愉快地抓包了!
先随便填一些数据,像这样:
点击提交。
可以在Fiddler里面看到我们刚才的数据,
关键的地方是这里:
是不是和我们刚才随便填写的数据对应。
没错!
我相信你可以一眼看出模板。
OK,我们现在来尝试更改数据包。
- 更改数据包
可以看到,header里面有很多无用参数。
只留下几个必要参数。试着发送一下。
回复10,成功。
Params里面也有很多无用参数。
经过我的筛查,留下来了三个参数,最终的Url长这样:
- curid:问卷的唯一标识符
- starttime:打开网站的时间
- rn:‘.’后边的是一串随机数
第二步,编写程序
新建一个项目,打开我们的VScode
- 导入requests库
import requests
关于requests的教材我这里不再展开。
- 仿刻数据包
headers = {
'Connection': 'keep-alive',
'Accept': 'text/plain, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
body = {
'submitdata': '1$一二三}2$1}3$1323}4$222}5$333' #此处修改填写的内容
}
localtime = time.localtime(time.time())
time_now = f'{localtime[0]}/{localtime[1]}/{localtime[2]} {localtime[3]}:{localtime[4]}:{localtime[5]}'
print(time_now)
params = {
'curid': '66023270',
'starttime': time_now,
'rn': '2348484261.'+randomInt(8)
}
- 最后,发送这个数据包:
response = requests.post(headers= headers,data= body,verify= False ,params= params ,url= 'https://www.wjx.cn/joinnew/processjq.ashx')
- 大功告成!
一个作业
- 如何判断填表成功?
- 实现自动填表
高级操作: - 使用代理,避免ip重复
- 迁入服务器,连上物联网
- …
后续
- ‘rn’的前半段参数目前我也没搞清楚是怎么产生的。
最后
- 唯有不断地学习和练习才能取得进步。
- 计算机并不解决问题,它们只是执行解决方案。 ——Laurent Gasser