长理教务查成绩
长理教务查成绩
闲来无事,尝试搞了个长理教务查成绩的脚本,非常简陋,就直接爬取到了长理教务的成绩单直接展示出来了,没有对数据进行清洗什么的,因为本身还是能看的过去。
具体效果如上,懒得在正则重新写ui了。
实现思路
获取表单
通过浏览器的开发者工具进行分析,发现了获得成绩单的关键请求,就是请求网址http://xk.csust.edu.cn/jsxsd/kscj/cjcx_list 是这个的包,它会返回一段html内容,html内容就是成绩单的解析,其实这也就是我最终程序呈现出来的成绩,于是,我就先花了一点时间,做了个通过接受用户输入cookie,定制一个请求的脚本,发现只要输入正确的cookie,然后按照其他请求的格式设置header以后,就可以获得正确的成绩单,非常的简单。
这个程序效果如上,只要对应的cookie是正确的,就可以正常获取到我们想要的内容了。
获得cookie
这就让我头疼了很久,因为长理的教务真的很烂,让我很困惑,有的时候我明明清空了长理教务的所有cookie的时候,重新加载,发的包仍然会带一个cookie,可能是浏览器的原因吧,但是我多尝试了一下,也发现了规律。
通过之前的那个通过cookie获取成绩单的脚本可以知道,cookie需要三个值,其中两个的名字是JSESSIONID,还有一个的名字是 SERVERID_jsxsd,这个SERVERID_jsxsd的值是定值,一直是njxpc133这个字符串,而那两个JSESSIONID则是不一样的值。
每次我们用浏览器访问首页的时候,它都会给我们返回两个cookie,一个是JSESSIONID,一个是SERVERID_jsxsd,然后在我们输入完账号密码后点击登录的时候,会把我们的账号密码通过base64加密,然后再带上前面的两个cookie发送到http://xk.csust.edu.cn/jsxsd/xk/LoginToXk 这个网址,如果检验正确就会返回一个名字也是JSESSIONID的cookie,并且重定向到我们的主页。
就是这个包。
这下子思路就清晰多了,就是先访问首页获取两个cookie,然后再构造一个带有我们加密后的密码的包,获取第三个cookie,把这三个cookie合在一起用在获取成绩单上,就可以顺利拿到成绩单了。
总体来说挺简单的,霓裳没加反爬虫之类的,这弄的我真想拿一些扫洞脚本给这教务跑一跑了。
一点曲折
当我在获得前两个cookie后,转而思考第三个cookie获取的时候,被卡了很久,因为不知道为什么,我按照格式一模一样构造请求包,返回的一直是200,而不是302重定向,也一直没拿到正确的cookie,后来研究了很久才发现,我的这个请求的载荷中有**%%%这个作为分割账号和密码,但是我一开始的载荷设置是根据浏览器里的源代码,它是%25%25%25**的,所以才导致我一直请求失败,估计是判断账号密码错误,给我跳回登陆界面了。
还有就是一直没搞明白霓裳这b教务具体是怎么搞的,测试了好多次都有几次过程和之前不同,要么就是post载荷又变了,要么就老是404,但是我目前这个方法,还是可以用的。
这是GitHub项目地址:长理教务查成绩