python成绩查询系统_Python实现教务系统快速查分(一)

webchat.jpg

每次查成绩都要到学校教务系统那个破网站上点好多次才能看到分数,我就想能不能自己写一个快速查分的脚本呢?找了找没找到api接口,只能自己一步步来获取数据了。

下面就是教务管理系统的界面,需要学号密码和验证码才能登录。

AKmpyrC.png

用浏览器登录一下,然后在后台找到post的数据。

2p53kFx.png

username和randnumber也就是验证码提交的都是明文,但是密码是被加密提交的,第一个问题就是找出加密方式,我在js文件里没找到,最后竟然藏在了登录页面里面,这代码写的也是没谁了。

SnAufpo.png

验证码的问题暂时先用讨巧的方法来解决的,就是显示出来然后让用户输入一下。

登录进去以后,本以为只需要找到显示成绩的页面再爬取下来分析一下就好了,结果按照以前的方法却不能成功。大概看了一下,发现成绩显示在一个iframe里面,而这个iframe又在另一个iframe里面,如果直接访问那个显示成绩的界面,会跳转到一个错误界面,爬下来的页面也就是那个错误页面,这当然不是我想要的结果。

我试着按照页面执行的顺序依次去提交这几个页面,结果也不行,到了最后那个成绩界面还是有错。后来我想是不是因为数据是异步获取的所以要在Python里面执行js才行,为此我还专门用selenium试了好久,可最终还是没试出来。

就在我快要放弃这一计划的时候,偶然间看到网上一个爬虫的headers里面有一个Referer,而我之前的headers里面只有User-Agent这一项,试着加上了Referer之后再提交竟然成功了!本以为headers只是用来伪装成浏览器,没想到还有这个作用,又get到一条宝贵经验。

有了数据页面接下来就简单多了,以前都是用正则匹配的,这次换了种方法用了更加方便的BeautifulSoup4库。

代码有点长就不贴上来了,想要看源码的请移步我的Github:njnu-quick-check-results

v1.1 下载地址

1.1版把输入密码换成了星号显得更加安全,然后加上了验证码和账号密码输错的错误输出,不会像上一个版本直接崩溃。不过两个版本都有一个问题就是最后其实是要按回车键才能退出,写成任意键了……

正确查询界面

kXW5k4P.png

账号或密码输错界面

pvp4Yjy.png

验证码输错界面

yqgU7h7.png

v1.0 下载地址

1.0版只是简单的实现了查询教务系统成绩的功能,没有用GUI界面,没有去掉验证码,也没有加上错误判断。

正确查询界面

vHlV0uY.png

最后能获取到成绩还是挺有成就感的,但是现在还是控制台版很丑也不方便,下一步打算在2.0版本做个GUI界面,3.0可以利用图像识别把验证码给去了,然后有时间还可以作为一个功能整合到我之前的那个个人信息查询网站上面。哦对了,我好像还发现教务系统存在越权访问漏洞,理论上我可以获取到全校所有人的成绩,有机会写个爬虫爬一下(逃……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值