因为要考研嘛,想去图书馆。我们学校是早上六点开抢,同学们太猛,我每天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 BeautifulSoupbs = 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].stringif zwid != None and zwid != '窗' and zwid != '柱':zw[zwid] = tag.get('data-key')

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

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

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

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

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

    因为要考研嘛,想去图书馆.我们学校是早上六点开抢,同学们太猛,我每天5点50起床抢,都不太抢的到想要的座位,于是我就花了个两三天琢磨着怎么用代码来实现这个抢座,目前已经完成,虽然因为微信的那个sess ...

  2. 第三次作业:“我去图书馆”公众号用户体验分析

    一.目标: 基于实例分析,体会用户体验设计的 7 条准则. 二.对公众号进行分析: 在用"我去图书馆"这个公众号来微信选座的方法还没有在全图书馆实行之前,我们去图书馆都是要去一个一 ...

  3. Python爬虫 | 图书馆公众号座位自动预约【从0到1】

    引言 图书馆座位太难预约了! Case 1:抢座开始时间点,网堵,页面卡顿. Case 2:疫情期间,24小时书房每天仅有50个座位可预约. Case 3:可能有其他事情耽搁了,忘记抢座,稍晚点回来, ...

  4. 代码高亮_微信公众号代码高亮美化工具 Markdown Nice

    微信公众号代码高亮美化工具 使用 Chrome 浏览器把右侧生成的页面直接拷贝到微信中即可. https://www.mdnice.com/ // 目录[TOC] 1. Markdown Nice 简 ...

  5. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  6. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...

    9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...

  7. 使用代理爬去微信公众号_使用微信公众号开发模拟面试功能

    猫 最近在整理我在大厂面试以及平时工作中遇到的问题,记录在 shfshanyue/Daily-Question[1] 中,但觉得对于时时回顾,常常复习仍然做的不够. 于是在微信公众号中开发了随机生成模 ...

  8. 女朋友分手那天,女朋友说闺蜜老公收入是我 5 倍!还不去这些公众号学习?...

    人与人之间的差异,很多时候在于认知,说起大厂的程序员,一般技术是会好些,一方面原因能进大厂的程序员大部分学历.专业都过硬,另一方面也是最主要的,他们也会不断利用大的平台学习总结,触类旁通,掌握更多的技 ...

  9. 使用Markdown排版微信公众号 代码格式化

    微信公众号一大痛处就是排版问题,而使用Markdown格式的文件可以方便的对微信公众号或者百家号进行文章排版,代码的格式不再错乱,支持更换代码样式主题,代码长度溢出时横向滚动.推荐一款在线的微信公众号 ...

  10. 使用代理爬去微信公众号_公众号粉丝从0到1000的引流思路企业如何做好微信公众号运营?公众号运营技巧,你都知道吗?微信公众号怎么去推广运营?...

    一直以来,公众号打开率持续走低几乎成了一个行业共识.但事实上,过去一年微信公众平台的整体流量是上升的. "上升幅度在内部看来还不小."微信公众平台相关负责人表示. 但为什么平摊至每 ...

最新文章

  1. vs2008中,在OCX控件中应用doc/view基本步骤
  2. shell下的进度条和最大最小平均值
  3. SQL删除一个数据库内所有表的数据保留表结构
  4. button和sumbit提交表单的区别
  5. 学计算机的要做文档吗,我是如何学习计算机编程的
  6. 【5】CCNA课堂第一天
  7. mybatis XML格式日期的处理 还有 日期对比的sql
  8. 抽象工厂模块在开发中的应用
  9. halcon使用点拟合圆形时候,点集顺序紊乱,不影响圆形拟合效果
  10. LeetCode之Count and Say
  11. Java输出小明算对多少题目_2014年Java方向C组第十题
  12. ibm cloud怎么使用_使用VueJS,FeathersJS和GraphQL快速入门IBM Cloud
  13. perl socket初步
  14. 火山PC模拟键盘操作
  15. 计算机系统操作中级工试题及答案,计算机系统操作中级工试题附答案.doc
  16. cropper裁剪图片并上传
  17. upload上传, 取各类文件的名字
  18. 如何提高淘宝新店店铺关注量方法技巧
  19. python怎么把ppt转成html,如何使用python把ppt转换成pdf
  20. 2022茶艺师(中级)国家题库模拟考试平台操作

热门文章

  1. Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
  2. java操作k8s api报错:SSLHandshakeException: should not be presented in certificate_request
  3. 详解Unity中的生命周期函数
  4. 非常简单的四子棋【java编写】
  5. 1.深入理解C/C++中头文件(.h)与源文件(.c/.cpp)以及我们为什么需要.h头文件
  6. unbuntu基本操作
  7. 程序员的自我修养有哪些途径
  8. 笔记本电脑蓝牙搜索不到设备
  9. JAVAapi—数据库连接
  10. Windows7 SP1 OEM 简体中文旗舰版