CUMT教务系统模拟登录

没爬过自己学校教务网站怎么能说自己会敲爬虫 : )

在此记录模拟登录cumt教务系统

P.s  Markdown学习中....没找到在哪里能插入代码...所以代码都是图片形式,在后面附上github地址



正文开始

教务系统网址


CUMT教务系统模拟登录_第1张图片

和许多学校相同,都是正方教务系统(ummm正方和煎蛋难兄难弟)

查看源代码

可以看到由五个js进行登录加密,为RSA加密,不了解rsa的看这里:RSA加密

提交表单

CUMT教务系统模拟登录_第2张图片
1

post的数据包括csrf令牌以及明文的yhm(即学号,我随便敲的),和base64加密的mm(提交了两次),即密码

csrftoken

用来防止跨站请求伪造

源代码中搜索,找到随机生成的token表单value

CUMT教务系统模拟登录_第3张图片

登录加密

查看login.js

找到获取公钥私钥的地址


CUMT教务系统模拟登录_第4张图片

cookies问题

使用requests库的requests.session()保持会话即可


登录逻辑:从登录页面获取csrftoken,请求login_getpublickey.html提交时间参数获取rsa密钥,对获取到的密钥base64解密,用密钥对登录密码进行rsa加密,对密文再进行base64加密,最后post



rsa加密是最麻烦的地方

此处参考stackoverflow文章戳我

代码

CUMT教务系统模拟登录_第5张图片


CUMT教务系统模拟登录_第6张图片

放上代码地址,使用时导入login.py,调用httpmthd类即可

github地址

此处的requests库会有一个编码问题,按报错把库文件代码里某处的'latin1'改为'utf-8'就可以解决

模拟登录后顺便做了成绩获取


CUMT教务系统模拟登录_第7张图片

打算有时间了敲一个多线程暴力抢课脚本,但是很狗的是,敲完程序测试的机会就只有学期末抢课那几天,这学期敲好调试好要等到过一学期才能拿来用 ( :


CUMT教务系统模拟登录_第8张图片

好了不管这些,反正模拟登录成功后就可以为所欲为了


CUMT教务系统模拟登录_第9张图片



selenium脚本

除了利用RSA加密密码外,还可以使用selenium直接提交表单


CUMT教务系统模拟登录_第10张图片

缺点是button的click()有几率失效,网上有解决办法,不多讨论

P.s在此强烈谴责selenium喜新厌旧的行为!!!居然抛弃了PhantomJS转投火狐和chrome的无头版本,然而火狐无头实例化耗时比phantom多了不少

而且既然不支持phantom,为啥库文件里还是有phantom的包,直到运行的时候才报错说phantom已经过时了,请使用火狐或谷歌...莫名其妙.jpg


CUMT教务系统模拟登录_第11张图片



更多思路

还可以node.js本地运行js加密,或者提交到在线rsa加密网站

反正方法有很多,没有验证码也可以说对爬虫很友好了




第一篇博客文章end:)

2018.3.28

你可能感兴趣的:(CUMT教务系统模拟登录)