热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高校抢课脚本实现思路

导引:每逢新学期到来,各大高校陆续公布新课表、定时开放抢课,但高校的网络一向是一言难尽。我相信各个大学学生,都会有这种苦恼&

导引:每逢新学期到来,各大高校陆续公布新课表、定时开放抢课,但高校的网络一向是一言难尽。我相信各个大学学生,都会有这种苦恼,那就是在选课时无法选到自己心仪的课程,我也曾在csdn上寻找过,可是未尽人意,因此今天想分享一下我制作抢课脚本的流程,能给大家提供一个好的思路。

*温馨提示:请各位遵守学校的各项规定,请勿通过重复发包等操作干扰教务系统的正常运行。*

该思路是由PYTHON实现的,所有的逻辑其实都是模拟真实的选课,只不过用代码实现比手动确实有优势,步骤梳理:


  1. 实现账号登录(寻找账号、密码的加密方式以及验证码获取验证)
  2. 保持登陆状态
  3. 寻找选择各科所提交的信息
  4. 向服务器发出请求
    **

正文

**
一、解决登录:
首先用一个登陆界面作为例子:
随意找了一个登陆界面
调用开发者工具,寻找post请求的信息:
在这里插入图片描述
可以看出密码是被加密的,账号没有加密,还有验证码和不知道从哪儿冒出来的uuid。
先解决密码加密的问题,一开始我以为这是一个简单的base64加密方式,没想到是我自己给想简单了,后来经高人指点才知道是经典AES加密,由于直接向服务器请求的就是加密过后的数字,所以密匙key一定就在页面中,结果很容易就能找到

loginVue.loginForm.aesKey = "7XxrXD3ycISDK15O";

有了密匙,密码加密算是解决了,可是还有验证码。刚开始我想通过将验证码图片下载来,调用tessacrt OCR光学识别识别出验证码,后来发现识别率并不高,就算训练出自己的库,对上面的图片的识别还是差强人意。最后不得已调用了打码平台。。。。。。
那么验证码图片如何得到呢:
还是开发者工具:在这里插入图片描述
可见login为登录请求,剩下的两个里面肯定有验证码的地址:
captcha:在这里插入图片描述
而这里面的captcha和下面的请求好像有关系经过分析它就是验证码图片的二进制经base64编码得到的数据,由此我们得到了uuid的来源和验证码:

将base64编码的图片变成真正的图片:

def acq_PIN():url='验证码网址'headers={'Referer': '请求头部分可由自己的电脑上查看','User-Agent': '请求头部分可由自己的电脑上查看'}repOnse=requests.post(url=url,headers=headers).text#print(reponse)url2=re.findall('"captcha": "(.*)",',reponse)[0]uuid=re.findall('"uuid": "(.*)"',reponse)[0]#print(url2)#print(uuid)a=url2.split(',')[1]#print(len(a))imagedata = base64.b64decode(a)#print(imagedata)file = open('1.jpg',"wb")file.write(imagedata)file.close()

至此账号、密码、验证码、uuid已解决,开始登录:

s=requests.Session()headers={'Host': '请求头部分可由自己的电脑上查看','Origin': 请求头部分可由自己的电脑上查看','Referer': 请求头部分可由自己的电脑上查看','User-Agent': '请求头部分可由自己的电脑上查看'}PIN,uuid=acq_PIN()url='登陆网址'data={'loginname': Account,'password': PS,'captcha': PIN,'uuid': uuid}#repOnse=requests.post(url=url,data=data,headers=headers).textrepOnse=s.post(url=url,data=data,headers=headers).text

二、实现选课
实现登录后接下来的操作就简单了,剩下的都可以用post和get请求堆积而成
在这里插入图片描述
分析选择每一个课程所提交的数据,然后抢课的时候可以抢到心仪的课程(每个课程的数据,要么是固定的,要么就是可以从页面获得的)。
结果展示:
在这里插入图片描述

*至此,就跟大家分享到这里如果大家有什么想法,可以在评论区里提出,这篇文章就相当于抛砖引玉了。*

推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
author-avatar
暧gx祢生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有