今年因为众所周知的原因,一整个学期都在家,但是学校要求每天都需要填报健康和出行报告… 坚持了一个学期,真的坚持不下去= =,趁这两天有空写一个自动化工具解放自己~
1 整体思路
基于填报系统的特点,考虑了两种自动化提交的方式:
- 使用selenium自动化框架进行模拟填报 这部分内容请参考上一篇博文
- 直接通过https协议获取页面,登陆并发送对应的post报文
这一篇文章主要分析第二种方式。
2 分析过程
因为这是一个需要登陆的网站,所以我们首先需要建立session并登陆。因为网站采用了https,并且页面跳转比较迅速,很难直接在chrome的开发者工具中看到对应的报文,所以这里我才用了Burpsuite Proxy的方式,拦截了中间的报文。看到了登陆过程中对应的post请求。
这里可以看出这个post表单有三个参数i_user、i_pass、i_captcha,分别对应用户名、密码和验证码。
因此我们这需要构造这样一个包发送到 https://id.tsinghua.edu.cn/do/off/ui/auth/login/check 这个URL即可。
用同样的方式再来看我们提交日报时候的post请求。只需要向对应的URL发送指定内容的post报文即可。这里需要注意每次post报文发送的URL是否一致,我这里尝试拦截了多次,发现目标URL是一致的。
3 Code
1 |
|
总结
直接发送https报文的方式更接近于问题的本质,所以会更简洁。但是要注意的是这里因为报文固定,为了简便,我直接从拦截的报文中获取了对应的数据,如果需要从https通信中自动获取信息,要经历更复杂的通信过程。拦截过程就发现了,其实这一过程的通信不止这两个包。
Okay,将代码挂在服务器上设定间隔时间,大功告成!