前提背景:
在学校中存在很多公共资源需要抢,比如自习室的线上抢,图书馆的线上抢,体育场的线上抢,但是很多时候刚开放就没有了,为了深入探索这一现象,开始针对学校内此问题进行研究,并结合自己学校实例实现羽毛球馆的抢场地软件。
中国石油大学(华东)羽毛球抢场地系统
打开中国石油大学体育馆,点击场地预定。
选择好馆,然后选择时间进行预定
如图所示,上面有很多绿色的格子,每个格子上面都有数字,对应的是在当前时间段是否可抢,如果是没颜色的格子,就不能抢。
点击提交订单就可以抢到自己能打的场子。
以上就是学校抢羽毛球场地的全部流程,但是如果一切都能这么顺利就好了,学校是每天早上八点左右能开始抢当天的和第二天的场地,但是一般来说,由于学校的羽毛球爱好者众多,所以场地哪怕每个时间段有13个(主馆6个副官7个)也不经常能抢到场地,甚至还需要经常的从场地贩子哪里买,所以结合专业知识去研究出了羽毛球抢场地系统。
中国石油大学(华东)羽毛球抢场地系统分析
细心的小伙伴可能会发现,我的以上操作实际上最重要的一步就是提交订单的部分,所以最直接的就是,分析点击“提交订单”后像服务器发送的请求。
将对应的页面在浏览器中打开,如下
打开开发者模式,当点击付款的时候,便会捕获到页面向后台发送的信息。
可以看到,当我们发送点击之后,就会增加一个新的网络请求捕捉(在这里需要真实的充值缴费才可以)
在这里可以看到该请求的所有信息。
上图是需要向后台发送的数据。
通过这样的分析,实际上已经将羽毛球场地系统分析出来了。通过我们的点击,携带所需要的场地,发送给后台进行抢场地,如果顺序的话,那么场地会被抢到。然后绑定的微信端就会发送信息。
以上便完成了中国石油大学(华东)羽毛球抢场地系统分析。
中国石油大学(华东)羽毛球抢场地系统理论实现
通过前面的分析,实际上最关键的就是向后台发送一个请求,携带着选择的信息。
那么通过实践,有两种比较简单的实现方法。
- 通过浏览器模拟鼠标的行为,用自动化技术seleium爬虫 代替 人来进行点击(慢)
- 使用post提交,直接向后台发送请求,模拟浏览器从而绕过浏览器(快)
自动化seleium
Seleium测试直接运行在浏览器中,就像真正的用户在操作一样。通过浏览器打开预定场地页面然后执行,设定定时器将一切自动化,极大的节省了人员时间。但是缺点是,由于羽毛球抢场地系统到了8点加载有点慢,以及网络的问题,实际上加载出来的时候场地就已经没了,所以该方法比较慢,成功率很低。但是可以进行修改变成爬虫系统。经过实验测试,修改后的爬虫可以爬取到想要的信息。
post提交
将获取到的请求头和响应头进行分析,并捕获到发送的数据,这样就可以通过程序后台post直接向羽毛球的服务器发送抢场地信息,节省了浏览器加载资源的时间,非常快,成功率非常高。
中国石油大学(华东)羽毛球抢场地系统代码开源
https://gitee.com/ni-hongsheng/badminton 以上为结合以上分析步骤并稍加改进的代码实现
思路扩展
通过显示案例可以明白在学校内部的抢公共资源是大概怎么样的流程,中国石油大学(华东)的羽毛球抢场地系统是在微信中,所以最重要的是获取到一个wxkey,但是这个通过测试都能获取到,所以就能还原到后端之间发送请求的逻辑实现。
那么将此场景应用到抢图书馆位置,抢课其实大体流程也是一样的,一些比较好的课和位置其实大多数人是抢不到的,在设计软件的时候可以先测试容易抢的,将发送的信息解析出来,然后应用到不好抢的地方。