湖南工业大学教务系统爬虫(模拟登陆篇)

之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的思路和对网站架构的分析

要想爬取教务系统的数据就必须做到对教务系统网站的大体了解,分析他的登陆模块,分析它是如何获取数据的,好了我们先从登陆开始。

先打开教务系统网站

湖南工业大学教务系统登陆地址

这是入口页面,可能同学们看到验证码就要怯步了,其实我最开始看到验证码我也有点虚了,但是我们往后走就会发现这个验证码就是个摆设,没有任何作用,服务器并没有对验证码进行判断,好了,下面最重要的是找到发送账号密码的接口,不难发现,这个登陆是用表单做的,它是通过提交表单来进行数据提交的,当账号密码正确后它会通过重定向跑到主页去,如果账号密码错误又会回到登陆页面,现在知道他是如何传递数据的之后我们就是要找接口,但是这是表单,会发生页面跳转,如果不借助工具的话我们是找不到那个接口的,因为还没等到你找到那个接口压面就已经发生跳转了(当然你也可以通过打断点,自己去了解一下浏览器的开发者工具),我是使用fildder(工具的使用自行百度)这个抓包工具来找登陆的数据包的

通过抓包找到登陆接口

我们找到了接口,里面有四个参数,userAccount、userPassword、RANDOMCODE、encoded,第一个参数是账号(必填),第二个是密码(可不填),第三个是验证码(可不填),第四个是一个加密后的字符串(主要破解目标)

破解encoded参数

从上一步中我们已经知道参数的大概组成,最终我们是要破解最后一个参数才能完成登陆功能,现在我乱输入一个学号和密码来具体看一下参数,我输入学号:17401600116 、密码:www123456,抓包后参数为:userAccount=17401600116&userPassword=&RANDOMCODE=pu61&encoded=1NT67T294M3005b196q00T740H041xnF1Lb6ox5%254R%25dt%25aowFKiwU6yw6bT17x2Sr3J456,我们认真他看一下encoded这个参数是否有什么规律,我们在1NT67T294M3005b196q00T740H041xnF1Lb6ox5%254R%25dt%25aowFKiwU6yw6bT17x2Sr3J456字符串中可以发现它既包含了账号又包含了密码,一次抓包可能没法完全找到字符串拼接的规律,我们多抓几次

1NT67T294M3005b196q00T740H041xnF1Lb6ox5%254R%25dt%25aowFKiwU6yw6bT17x2Sr3J456
16o7A4et0Fno106p6J05U00810p196cx%255s%253p3%25Dw60hw57wl9N10942H83e456

上面是两次抓包encoded参数,可以发现两次encoded参数除了都包含账号密码之外并没有什么规律,这个时候仅仅通过这个参数来发现规律已经做不到了,我们只能去看源码了

通过源代码分析,找出encoded加密的方法
 var strUrl = "/Logon.do?method=logon&flag=sess";$.ajax( {    url:strUrl,   type:"post",    cache:false,    dataType:"text", success:function(dataStr) {  //将会受到形如6oAetFno06pJ5U080p9cx5s3p3D60h57l9N094H8e#21233122212231323321的随机字符串if(dataStr=="no"){return false;}else{//将随机字符串以#为分隔符,分成两部分取第一部分var scode=dataStr.split("#")[0];//将随机字符串以#为分隔符,分成两部分取第二部分var sxh=dataStr.split("#")[1];//将账号和密码按照:账号+%%%+密码 的方式拼接var code=document.getElementById("userAccount").value+"%%%"+document.getElementById("userPassword").value;//最终加密好的encoded参数var encoded="";for(var i=0;i<code.length;i++){if(i<20){//拼接原理:将scode与code进行拼接,拼接规则是按照sxh中的数字来切割字符串scode然后与code中的一位进行拼接encoded=encoded+code.substring(i,i+1)+scode.substring(0,parseInt(sxh.substring(i,i+1)));scode = scode.substring(parseInt(sxh.substring(i,i+1)),scode.length);}else{encoded=encoded+code.substring(i,code.length);i=code.length; }} document.getElementById("encoded").value=encoded; if("logon"!="logonLdap"){document.getElementById("userPassword").value="";}document.getElementById("loginForm").submit();}  },    error:function() {       alert("计算异常!");}         });

上面这段代码是在真正提交表单之前执行的一个ajax,原本代码是没有注释的,我为了方便大家理解添加了注释,整个代码的原理已经清楚了(就是在真正提交数据前会进行一次ajax请求,获取一个随机字符串,然后将随机字符串按照一定的规则与账号密码拼接)

写代码模拟整个登陆过程

思路已经提供了,代码我就偷个懒没写了,我就说一下写代码的思路吧,首先我们确定语言,因为我就java还行一点,其他的语言都很渣,我就用java讲解吧,如果不使用第三方工具类的话我们可以使用jdk自带的HttpURLConnection这个类,它支持构造请求头,get,post,功能不是很全但是够用了,首先发送一个post请求 http://218.75.197.123:83/Logon.do?method=logon&flag=sess ,获取到随机字符串之后按照上一步拼接规则对账号密码加密,产生encoded参数,然后构造真正的登陆请求,将参数拼接好以后还是发送一个post请求,因为登陆成功后会发生重定向,响应码是302,响应头里面会有一个location字段,到这里我们其实已经登陆完成了,只要将cookie保存起来就可以了,cookie就是你的身份,你可以通过cookie获取教务系统你能获取到的任何数据了

下一篇我将教大家如何爬课表信息,如何整理空教室数据,如何爬成绩

湖南工业大学教务系统爬虫(模拟登陆篇)相关推荐

  1. 湖南工业大学教务系统爬虫(课表获取篇)

    前言 之前写了模拟登陆的过程,因为爬课表需要先登录,所以没看过之前那篇博客的先回去看一下怎么通过模拟登陆获取cookie,下面是我用这些写的一个小程序和安卓应用 分析 因为新版教务系统前端所使用的方式 ...

  2. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  3. 新版方正教务系统爬虫

    新版方正教务系统爬虫 技术 解释 Python 2.7 BeautifulSoup 4.X Pycharm 2017 Firefox - Firebug - 新版教务处地址 218.199.228.4 ...

  4. python实用脚本 知乎_Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  5. 拟物校园 | 拟物校园,一个高校教务系统爬虫,现支持正方教务、青果教务。

    特别声明:除非注明,否则均为 夏末浅笑博客 原创文章,禁止任何形式转载 nivinEdu 拟物教务,一个高校教务系统爬虫 github:https://github.com/nivin-studio/ ...

  6. python 突破b站验证码_Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能...

    写在前面 今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下! 一.需求分析 模拟登陆哔哩哔哩 网站链接: https://passport.bilib ...

  7. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

  8. 湖南工业大学大学计算机教育网,湖南工业大学教务管理系统入口http://jwc.hut.edu.cn/...

    一.湖南工业大学教务管理系统入口及简介 湖南工业大学是一所具有60年办学历史的综合性大学,是"服务国家特殊需求博士人才培养项目"高校.2006年2月,经教育部批准,学校由株洲工学院 ...

  9. python爬取学校教务管理系统_python爬虫模拟登陆学校教务处

    最近在学python爬虫,我想教务处官网可能是每个学生第一个自己动手爬取的网站吧.而且很多学校的教务处没有验证码,很适合初学者练手. 环境准备 本次模拟登陆用到的库除了requests外还有lxml, ...

最新文章

  1. 基于Fragment的百度地图框架的使用
  2. VideoUrlParser视频信息分析
  3. Mybatis 输入映射
  4. java菜单如何点解_解读java菜单
  5. 思科2811路由器采购回来首次配置
  6. (进阶)python实现库存商品管理系统
  7. .json格式转为.yml格式
  8. MATLAB寻找高斯光束光斑中心
  9. Web Moudle
  10. oxc000014c解决方法
  11. 解决AutoCAD软件打开CASS软件成图字体显示成问号的问题
  12. Saber吃苹果,保持每箱苹果数量递增
  13. matlab振动响应,基于MatLab的车辆振动响应幅频特性分析-中原工学院学报.PDF
  14. hive自定义分区器
  15. 02-线性结构3 Reversing Linked List (25 分)
  16. Java实现 LeetCode 63 不同路径 II(二)
  17. 在线XXEncode加密/解密(XXEncode编码/解码)工具
  18. Python文字(汉字)转语音https://zhuanlan.zhihu.com/p/26726297
  19. 东北森林航空消防地理信息系统介绍
  20. GIS中的数据(空间数据)

热门文章

  1. 【原神】手机版原神下错版本不能登录怎么办?B服修改为官服
  2. 技术精湛,保障有力!麒麟信安获国网重庆市电力公司感谢信
  3. 科学-建筑学-建筑美学:建筑美学百科
  4. 反激式开关电源仿真 基于Matlab simulin仿真软件设计
  5. Prism Dialog
  6. 一只小蜜蜂(简单递归)
  7. spring boot 配置logback,logback不打印日志
  8. Python 计算KDJ指标
  9. 连续时间傅里叶变换的共轭与共轭对称性(详细推导)
  10. spring 自定义标签 学习