/neu_login_3.0

模拟东北大学教务处网站登录 并获取全部学生信息 目前可能随着教务处网站的更新变得不可用

Primary LanguagePython

东北大学学生信息自动获取

概述

提供学号和密码,获取学生个人信息、学生所有课表、学生所有成绩的web api。
源码可以自行查看,使用了屁眼通红 + selenium模拟浏览器 + PIL处理验证码图片 + Tesseract人工智能识别验证码 + 美丽汤解析html + flask。
我校教务处的验证码还是比较弱智的,只有“x * y”和“x + y”两种形式,而且 x 和 y 都是个位数,甚至两个运算数和运算符都会出现在相同位置。所以用PIL把两个操作数和一个操作符的位置扣下来,然后单独识别。具体可以看源码。

验证码示例

感叹这玩意儿怎么……这么慢呢……
获取信息需要三四十秒,如果你用过selenium的话,你就会知道……这玩意儿确实很慢。更不要说还得识别验证码,然后从三十多个页面里获取全部这些信息了。
但没办法啊,本来也是想采用高效率方法的,但我确实水平不济。什么cookies,再转发一下验证码图片,验证码图片也要改变,实在搞不成了,对那几个板子也没深刻理解。同时还想赶另一个东西的工期(这东西是为了在那个工程里可以调用才写的),所以迫不得已,用了最暴力最蠢的方法,这方法根本就是纯模拟人工登录的啊(笑)。

调用方式

可以进入 http://120.78.194.94:1999/DEMO 看一下网页调用的demo,也可以向 http://120.78.194.94:1999/ 这个链接post一下 {"student_id":你的学号,"password":你的密码},会响应一个巨他妈长的json字符串,里面包含这个学生的所有个人信息,课程信息和成绩。这个返回的json字符串的格式,会在下面解释。
当然这两个链接有可能不会保留很长时间(说不定我哪天心情一不好就把服务器重装了呢也说不定),如果真的要用的话,还是克隆到本地吧。
更新:昨天把服务器重装了,现在这两个链接还真不能用了。

返回json数据格式介绍

返回的json字符串:
{"information": 执行报告, "pages_message": 学生信息}
其中执行报告学生信息都是数组

执行报告:
数组中如果含有"Login successed."字符串,即为登陆成功,获取到了有效的学生信息。
如果不含有"Login successed."字符串,这个数组中会包括登陆中遇到的弹窗的内容(教务处网站在登陆失败的时候会弹出弹窗)以及对登陆失败的原因的说明字符串。

学生信息:
如果执行报告数组中含有"Login successed."字符串,那么这个数组中的信息有效。
数组中的元素,基本格式是:
{"key": 信息标题,"value": 信息内容}
对于一般的信息标题,那么该元素就是单纯的一个key-value对,可以直接理解。
如果信息标题是如"2015-2016学年第一学期"一样的学期名,那么这个元素包含了一个该学生某学期的所有科目成绩。

(很明显没写完)

我懒得写了

hmmmmmm……妈的, 真麻烦,懒得再写了,感觉写了之后也没人看。
如果你需要用这个接口,不明白返回的json数据的格式,可以自己观察一下json字符串,也可以联系我,不用谢。