CUMT教务系统模拟登录

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

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

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



正文开始

教务系统网址


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

查看源代码

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

提交表单

1

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

csrftoken

用来防止跨站请求伪造

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

登录加密

查看login.js

找到获取公钥私钥的地址


cookies问题

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


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



rsa加密是最麻烦的地方

此处参考stackoverflow文章戳我

代码


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

github地址

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

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


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


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




selenium脚本

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


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

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

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




更多思路

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

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




第一篇博客文章end:)

2018.3.28

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容