加上分析JS,测试程序以及期间遇到360误杀爷的EXECJS模块以及其他巴拉巴拉一堆问题,共耗时一天多一早晨的时间,爬下了青果公司为XX学校用C#开发的教务系统(我还是第一次爬C#写的网站,拿小本子记下来),这里只介绍课程表的抓取思路,其他的什么教师评价啊,什么选课啊都很简单了,都差不多的思路,有耐心的小伙伴可以去写个抢课系统或者其他上商业价值的软件。

起初猜想

开始猜测,XX学校的管理系统肯定挺容易爬的,不就是个课程表信息吗,然后就自认为几分钟就可以搞定的去分析网络请求,然后,看到了一堆加密随机字符串,以及一堆让人害怕的请求数据,像下图所示的这样:

上面那个图的东西是登陆页面提交的POST数据,开始很懵逼,推测__VIEWSTATE,还有 dsdsdsdsdxcxdfgfg还有fgfggfdgtyuuyyuuckjg都是动态生成的,结果,嘤嘤嘤嘤嘤,还真是,所以,挖槽,一堆问号泛出大脑。然后果断的放弃了登录页面往后继续分析,因为我知道要解开这些参数,就需要去分析JS代码,并且,一定会很耗时间,所以先暂时放下,过会儿再静下心来解决。所以,暂时放弃了登录页面,转向课程表页面。课程表页面,哇,贼猥琐,长的下图所示这样:

所以,看这个页面这么丑,一定抓起来很简单嘛,所以,信心倍增,冲冲冲,爷要抓这个。。。。。。。。就这样,半小时过去了。。。。。。又半小时过去了。。。。。然后爷开始体力不支,躺下睡了一觉,大概倒下2个小时,重新爬了起来,果断地啪一声关了笔记本电脑的盖子,这特么,都是啥,嘤嘤嘤。。。。。。。请求参数长下图这样,分析得,都是动态生成的,需要从JS分析:

然后,那课程表数据呢?一张图片而已,你看,还特么把路径写在了源码中,有路径,这管理系统太特么好爬了。。。。。。。结果得,太特么XX了,我特么#####fuck#####…(此处省略1亿字),是有图片得路径,结果访问后提示无效,所以,这玩意只能访问一次,这是啥。。。。嘤嘤嘤,长下图所示的这样(这是啥?是图片嘛,怎么还有HTML标签?难道上面的东西是图片信息?一堆尝试后,无结果,这就是为什么爷白白花了1个多小时导致最后贼困,睡了2小时的原因。。。。。):


分析过程

有了上面说的种种太Fuck了的体验之后,开始明白事情的有趣性。倒了杯凉开水,喝了几滴,开始平静下来专注于解决这些问题。首先分析的是 课程表页面的hidyzmhidsjyzm还有m参数。(或许有人问,你特么怎么不从登录页面开始?爷告诉你一个真理,初次作得找软柿子捏,你看登录页那一堆XXFuck了的随即参数,我估计,开始还没啥成就感就从登录页一直卡住很久的孩子,心理阴影面积应该挺大吧 )

初始从“检索”按钮的点击事件入手,开始分析表单提交的整个流程,如下图所,“检索”按钮点击事件触发这个ChkVal()函数,对这个函数打断点,从下图不难看出,我们要找的m参数其实就是这里的s,要找的hidsjyzm就是通过md5("12843"+TheObjVal+s).toUpperCase()生成的。

所以,我们现在只需要回溯js执行期间涉及到的各个函数及执行过程就可以生成对应的m以及hidsjyzm。从上图来看,未知的参数及函数有:Sel_XNXQrandomString()md5(),所以,接着寻找这些参数以及函数。

下图所示,Sel_XNXQ是一个常量,当然,不可能保持恒久不变,会根据学期的变化而变化,文章末尾会拿出一张图片来解释这里的各个参数具体变化规律。
然后是randomString()函数,在Validate.js中找到的
然后是md5,不过看了看,整个md5.js文件差不多来来回回把里面的所有函数都执行了一遍才出来结果,相当费劲的js

找到上面的几个参数和函数,剩下的就是抽取这些参数以及方法到一个js文件中,然后用python调用执行这些函数,获取到最后的参数。
所以,参数的问题已经解决了hidsjyzm还有m,然而剩下的那个hidyzm则是在Pri_StuSel.aspx请求的返回的代码中包含
获取到这些参数,就可以进行构造POST请求http://jwgl.XXX.edu.cn/znpk/Pri_StuSel_rpt.aspx?m=...了,然而,这并不会直接去请求课程表的图片,这个请求地址的目的仅仅是为了提交给服务器这几个参数而已,不过这也是不可缺少的一步,所以,接下来在这些参数传递给服务器的基础上,还需要请求另一个地址http://jwgl.XXX.edu.cn/znpk/Pri_StuSel_Drawimg.aspx?type=2&w=1171&h=420&xnxq=20191&px=0,这样才会返回给你一大堆gb2312编码后的字符串,然后,我们只需要拿到这些数据,以二进制形式写入图片文件中就可以得到课程表的图片了。

至此,课程表分析结束,在请求头中,不难发现ASP.NET_SessionId=yfl0kb45uzmft....ygznpvd3j的重要作用,所以,接下来,就是去分析登陆页面,我们来获取这个ASP.NET_SessionId

分析中发现,ASP.NET_SessionId这个cookie其实在访问教务系统首页的时候就被设置在浏览器里,并且不会跟随登录或者其他操作的变化而变化。并且,我们在未登录的情况下拿到的ASP.NET_SessionId,是不能进行课程表查询操作的。上面分析的课程表获取方法的前提是 ASP.NET_SessionId参数代表的浏览器已经登陆了账号。所以,此时需要解决的问题有两个——
1.获取ASP.NET_SessionId
2.进行模拟登录使得ASP.NET_SessionId这个参数有登录的意义

和本篇文章开始的那样,模拟登录也是不容易的,我们需要解决下图所示的几个参数:__VIEWSTATEdsdsdsdsdxcxdfgfg,fgfggfdgtyuuyyuuckjg

首先进行实验得到,__VIEWSTATE这个参数每次刷新页面都会改变,并得到这个参数其实只是服务器返回的初始页面中一个特定的数值而已,看似很多很复杂摸不到头绪,实际可以直接在页面中用正则匹配出来,获取也是十分容易,如下图所示:
含有此参数的页面需要请求的链接是:http://jwgl.XXX.edu.cn/_data/login_home.aspx

接着往下分析,dsdsdsdsdxcxdfgfg这个参数以及fgfggfdgtyuuyyuuckjg这个参数,我们追溯登录按钮的点击事件,最后分析出如下图所示两个JS函数:
一个是chkpwd(),另一个是chkyzm(),前者是dsdsdsdsdxcxdfgfg的加密函数,后者是fgfggfdgtyuuyyuuckjg的加密函数,所以,方法和上面的js类似,回溯代码执行过程,提取全部的参数以及涉及到的函数,抽取到一个js文件中,用python执行获取到。
这里涉及到的函数以及参数有这几个:md5()txt_asmcdefsddsd,还有obj.value

md5()在上面分析的时候就已经找出,然而剩下的那个txt_asmcdefsddsdobj.value是个啥,然后打断点尝试,尝试几番之后,得到结论,这两个参数,前者是密码,后者是验证码。

所以这里有这涉及到验证码怎么获取的问题,所以,我们去解决验证码,回过头来接着写怎么往下走。

对于验证码的获取问题,就能简略概述的就简略概述。这里提供三种方式获取验证码:
1.使用pytesseract包,PIL包,以及识别引擎tesseract-ocr(具体怎么做有兴趣可以自己去百度)
2.打码平台(感兴趣也可以去百度看看,人工打码需要收费的)
3.把图片验证码爬下来,手动输入(我用的这种方式。有的人可能说了,为什么用这个?因为没钱,没 技术 粗心大意懒得去写机器识别浪费时间)

所以,开始pa验证码。这个很容易,并且,只需要拿到ASP.NET_SessionId,就可以给某一毫秒处访问验证码生成站点的时候给唯一的ASP.NET_SessionId绑定一个验证码,并且,推测服务器也是这么搞得,因为我没找到任何前端隐藏的标签或是自己判别验证码的证据。
验证码这个,挺有意思的,我也是直接追溯的验证码点击事件更换图片验证码的JS代码,如下图所示,只是拿到了点击时刻的毫秒值,去掉####巴拉巴拉一堆处理之后得到了t,用t加上基础url去请求验证码(开始的时候我以为教务系统傻X到用固定的t值绑定相同的图片来充当验证码,后来发现,相同的t值对应不同的验证码,然后爷就“嘤嘤嘤”了)

所以,我们解决了验证码的问题,然后回到登陆参数上,因此,有了验证码,然后就知道了js函数中的obj.value的值,所以,此时登录的所有参数都解决了

哦?以为这样就结束了嘛

刚刚开始而已

下面就是把提取到的JS函数汇总到一起,取出无用数据,进行优化,以及,给各式各样的函数起一个你看的懂得名字。哦吼,当然,还有python调用相关得代码。这样就结束了?吼吼,当然没有,还需要组建所有得请求,达到良好以接近于优秀的request请求逐个获取需要得到的参数,最后是测试,重组,然后其他账号测验。当然,我都整理好了,下面就不带着一起扯皮了,下载链接在文末

这个是文章里提到的XXX一堆参数的说明
下载链接:

  • 【1】github(附有使用说明)https://github.com/Meterprete/Educational-administration-system
  • 【2】腾讯微云(无说明)https://share.weiyun.com/5VZ7C1k

抓取青果教务系统信息相关推荐

  1. 利用正方教务漏洞抓取正方教务学生照片

    全国据说大部分学校采用的都是正方教务的教务系统,个人感觉安全性做的真的不是很好,比起综合教务,安全性差远了,利用爬虫能非常轻易的获得教务的学生照片. 这里只提供图片下载的代码,关于获取图片的url,懂 ...

  2. php正方系统抓取课表,以正方教务系统为例,用php模拟登陆抓取课表、空教室,抓取课表...

    以正方教务系统为例,用php模拟登陆抓取课表.空教室,抓取课表 课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. ...

  3. 从零开始开发一个自动抓取教务系统课表等信息并动态显示的安卓课程表APP,原理分析及功能实现完美教程

    前言 之前写过一篇JAVA使用HttpClient模拟登录正方教务系统,爬取学籍信息和课程表成绩等,超详细登录分析和代码注解的教程,在移植到移动平台时候,发现了如下问题: 抓取课表偶尔会不完全,出现全 ...

  4. 【Android+OkHttp3+Jsoup】 模拟登录教务系统 抓取课表和成绩

    原文链接:https://blog.csdn.net/u013347241/article/details/52711018 今天这篇文章为大家带来的是模拟登录教务系统并抓取课表和成绩的详细实现过程. ...

  5. php正方系统抓取课表,GitHub - melodyne/school_jiaowu: PHP正方教务成绩课表爬虫,微信公众号,小程序校园应用...

    正方教务系统课表成绩爬虫 The helper of ZhengFang System 欢迎fork/star 注意,该项目针对正方教务系统编写,不保证可用于当前你学校的教务系统. 1.项目定义 这个 ...

  6. python课表查询系统_使用python抓取广西科技大学教务系统课程表

    因学校教务系统课程表查询功能累赘,服务器经常挂,同时也不适合手机端查询,所以用python开发爬虫抓取所有课程表,放到我的服务器上面. 本文仅供学习. 特性 中途退出程序再次运行不会抓取到重复课程表 ...

  7. windbg工具安装配置及dump抓取

    安装与配置windbg 安装与配置windbg的symbol(符号) 第一步 下载WinDBG, 第二步 双击下载的文件安装windbg.安装时注意记住安装到那里了. 第三步 windbg访问符号需要 ...

  8. 如何手工抓取dump文件及分析

    在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试. 首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需 ...

  9. android抓取日志,Android抓取所有日志

    总有些时候我们会遇到非必现场景,若未及时抓取日志,可能为时已晚 抓取日志 抓取Logcat日志 这个是最简单的,使用-f重定向到一个文本文件即可,-v threadtime则显示详细时间和进程 # f ...

  10. Python爬取URP教务系统课程表并保存到excel

    Python爬取URP教务系统课程表并保存到excel 爬取URP教务系统课程表最终结果如图所示: 接下来开始操作: 首先打开教务系统->按F12->点击Network->刷新一下界 ...

最新文章

  1. 当打开淘宝的那一刻,它就知道你想要的是什么
  2. Seaborn使用set_context函数调整绘图标签和线条的大小、设置不同的模式、例如notebook模式、PPT模式、海报模式等、set_context函数可以指定绘图上下文并自动调整标签和线条
  3. 004_Bean标签
  4. docker -v 覆盖了容器中的文件_10分钟让你理解 docker 容器中的 uid 和 gid
  5. python uwsgi_Python Web 程序使用 uWSGI 部署
  6. @hot热加载修饰器导致static静态属性丢失(已解决)
  7. Hadoop之Shell命令
  8. Intellij IDEA设置显示行号
  9. Java并发(一)——线程
  10. netty解决方法 io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
  11. 一WAN多拨(一号多拨)实验
  12. OB0202 obsidian kanban插件使用
  13. c语言如何编译及调试,中如何编译运行及调试C语言程序.doc
  14. arx cloneSameOwnerObjects
  15. 由计算机谈最强大脑周玮
  16. 要求树根像果实一样作贡献,就只好把它做柴烧了
  17. SDCC教程(树莓派 Debian11 bullseye 使用官方下载源)
  18. 智能边缘计算设备介绍
  19. 用计算机弹钢琴曲,用电脑键盘来弹奏钢琴曲的小娱乐工具 - 站长工具
  20. 关于html5外文翻译三千字,新媒体外文文献翻译最新译文3000多字

热门文章

  1. Mac电脑如何快速查找文件
  2. vivo X9L的usb调试模式在哪里,开启vivo X9Lusb调试模式的流程
  3. vue中实现简单切换图片效果
  4. Java 生成水印图片
  5. python里面pop代码什么意思_python里的pop是什么
  6. webpack5 入门学习笔记(四)性能优化
  7. 解决移动浏览器不能正确转化时间
  8. [量化学院]基于协整的配对交易
  9. springboot 联合查询
  10. 中望3d快捷键命令大全_cad快捷键大全下载