“我去图书馆”公众号代码抢座的实现 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 公众号相关 >

“我去图书馆”公众号代码抢座的实现

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:307

因为要考研嘛,想去图书馆。我们学校是早上六点开抢,同学们太猛,我每天5点50起床抢,都不太抢的到想要的座位,于是我就花了个两三天琢磨着怎么用代码来实现这个抢座,目前已经完成,虽然因为微信的那个sessid更新的比较频繁,还是需要早起来拿写好的安卓软件传个cookie的数据,但至少每天都能抢到固定的座位了,心情就很舒畅。

抢座原理的简述

“我去图书馆”公众号实现抢座功能,肯定是通过与服务器进行交互完成的。通过抓包可以发现,最终完成抢座这一步的,是一个get请求,那么我们通过模拟手机来向服务器发送这样一个get请求,就能实现抢座。这个get请求的url格式为:“http://wechat.v2.traceint.com/index.php/reserve/get/libid={所抢阅览室的id号}&{一段莫名其妙的编码}={该阅览室座位号对应的编码}&yzm=”。这个get请求的请求头的信息如下所示。

{
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'X-Requested-With': 'XMLHttpRequest',
            'User-Agent': '{随便找个手机抓个包扒拉下来放这就行}',
            'Sec-Fetch-Mode': 'cors',
            'Sec-Fetch-Site': 'same-origin',
            'Referer': 'http://wechat.v2.traceint.com/index.php/reserve/layout/libid={所抢阅览室的id号}.html&{所在学校的代码}',
            'Accept-Encoding': 'gzip, deflate,br',
            'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
            'Cookie': {实时抓包抓到的cookie值}
}

上面用大括号括起来的部分都是在应用中需要改变的部分,包括:
1、所抢阅览室的id号;
2、一段莫名其妙的编码;
3、该阅览室座位号对应的编码;
4、所在学校的代码;
5、实时抓包抓到的cookie值。
其中,1和4都是可以通过抓包轻而易举地得到的。关于抓包,学习起来难度很低,如果不会的小伙伴可以通过搜索一些文章轻松地完成学习。5是需要每天起早抓包得到并放入程序运行的内容,承载着用户信息,也很容易获取到。真正需要进行一些操作去获取的是2和3。将这些内容填入到get请求中,通过代码模拟手机发送get请求,就能够完成抢座。

获取座位号对应的编码

在使用“我去图书馆”公众号进行抢座的时候,在进行抢座前我们都会进入一个页面,选定要选的座位之后点击抢座。通过分析网页源码,很容易定位座位元素的代码,座位元素的模板如下所示。

<div class="grid_cell grid_1" data-key="{该阅览室座位号对应的编码}" style="left:280px;top:210px;">
    <em>{显示的座位号}</em>
</div>

知道了座位号和编码是如何映射的,只要从页面中爬取数据就可以了,代码如下所示。

from bs4 import BeautifulSoup

bs = BeautifulSoup(html, 'html.parser') #html是爬取到的网页的文本
zw = dict() #创建一个字典,用来存放座位号和编码的映射

div_tags = bs.find_all('div', {'class': 'grid_cell'})
for tag in div_tags:
   zwid = tag.contents[1].string
   if zwid != None and zwid != '窗' and zwid != '柱':
        zw[zwid] = tag.get('data-key')

通过这样一个映射的获取,我们就可以方便地通过座位号获取到其对应的编码了。

如何获取那一段莫名其妙的编码

在编写代码的过程中,我对抢座位这个过程进行的多次的抓包观察,发现在座位号前面的那个query字符串是一个看不出什么规律的编码。解析这个query是在后端进行解析,但既然发get请求你要在页面上发,那这个代码必然在前端是有迹可循的。这个编码的答案就在页面底部的js链接中,通过运行那一段js代码就可以搞定这个编码,从而拼凑起这最后一块拼图。

感谢各位能够看完这篇文章,如果有什么不理解的地方或者需要我的一些帮助,可以加我的qq:1121174884

相关案例查看更多