Python实现学校学生管理系统的自动登录
来源:互联网 发布:单源最短路径算法spfa 编辑:程序博客网 时间:2024/04/28 21:09
主要是用于学校研究生管理系统的自动登录
YouTube地址:https://www.youtube.com/watch?v=K4LTgzm9G3w
秒拍视频:http://weibo.com/p/230444427857313e89770690bec69367024c29
主页:https://github.com/caiqiqi/AutoLogin
心路历程:
登录成功页面:
已登录的默认页面:
student-login-final.py
通过Chrome/Firefox的开发者工具以及Burp Suite分析登录过程的HTTP通信细节,然后用python实现对目标网站在给定学号密码情况下的自动登录。
难点
分析整个HTTP通信过程。实际用浏览器登录时由于有各种css/js/png文件,还有像WebResource.axd,ScriptResource.axd这种让你迷惑不知重不重要的文件。通过分析和实验,发现主要有三个HTTP请求。
1. 先请求登录页面 `http://gs.cqupt.edu.cn:8080/gstudent/loging.aspx?undefined` 如果已登录未退出这个session还是已登录>的状态,或者登录过期这个session虽然已失效但是sessionId还在,这种情况下不会新建session,而是沿用之前的session,服务器端返回的>请求中不会『Set-cookie』。如果不是以上情况,则会在这第一次请求之后服务器在返回的响应中通过『Set-cookie』发给客户端一个cookie>,这个cookie的内容就是这次session的sessionId。如果直接用requests库的get/post方法,则会在headers(HTTP的请求头)中将connection字段设置为closed,这样不利用之后的请求沿用之前的cookie以保持同一次session,导致服务器在登录认证的过程中不能将之后的请求与之前的请求联系起来,最终返回302重定向到这个页面 `http://gs.cqupt.edu.cn:8080/gstudent/ReLogin.aspx?ReturnUrl=/gstudent/loging.aspx?undefined` 让用户重新登录从而登录失败。在第一次发出的get请求后还要从返回的html页面中找出三个重要参数供后续的请求中用到。这三个参数是:登录的最后一步提交post请求时的表单里的数据’__VIEWSTATE’和’EVENTVALIDATION’字段;以及第二次get请求图片验证码时用到的`?image=124685645`类似这样的参数。
2. 然后请求验证码页面,即访问一个.aspx页面并带一个随机参数(这个参数并不是像有些网站一样通过前端的js文件中的Math.random()随机产生)。由于我并不知道服务器端生成这个随机参数的逻辑,于是我只能通过分析返回的html页面中找出下一步要请求的验证码页面。然后通过requests.Session.get发出请求,将得到的图片存入本地文件,然后打开这个文件用`pytesseract`这个库来将图片内容解析成文字。
3. 登录的最后一步就是将之前搜集的几个重要参数加上用户名,密码,验证码post到指定的url `http://gs.cqupt.edu.cn:8080/gstudent/ReLogin.aspx?ReturnUrl=/gstudent/loging.aspx?undefined` 注意这里不是提交到这里`http://gs.cqupt.edu.cn:8080/gstudent/loging.aspx?undefined` (这里碰到过坑所以提一下)
然后通过打印出当前页面的url可以看出是否已经登录了。然后就可以做任意已登录的操作了。
- ConfigParser: 用于从.ini文件中读取用户名和密码
- requests: 关键库。用于进行HTTP请求(GET/POST)。可带headers(HTTP请求头),data(POST时带的表单信息)。
- pytesseract: 开源图像识别库。它的image_to_string()可以将一个PIL.Image包装的图片文件识别出其中的文字信息,并返回该字符串。
- bs4.BeautifulSoup: 解析xml/html的库。这里用于查找hidden的’__VIEWSTATE’ 和 ‘EVENTVALIDATION’。也可用lxml或者正则re。
———————-2017年3月3日更新——————-
注:http://viewstatedecoder.azurewebsites.net/
一个解析__VIEWSTATE
的在线工具
- Python实现学校学生管理系统的自动登录
- 学生管理系统---Python实现
- 学校管理系统(Python)
- Python学生管理系统
- python学生管理系统
- 使用SSH三大框架实现一个简单的学生管理系统的登录
- C# 分层开发的案例 学生管理系统 实现用户的登录和修改密码
- Python 写的学生管理系统
- 学校学生成绩管理
- 学校学生成绩管理
- 学生管理系统实现
- 在学校里面,曾经过做过的学生管理系统
- 链表实现的学生管理系统
- 双链表实现简单的学生管理系统
- 学生管理系统的设计与实现
- 学生管理系统,实现学生的增删改查
- C# 学生管理系统 2 实现 添加 学生的数据
- Java程序---学生管理系统的登录和注册
- 《剑指offer》:[39]求解二叉树的深度
- HTML知识总结
- 快学Scala第7章----包和引入
- 显示接口-隐式接口-编译期多态-运行期多态
- N皇后问题
- Python实现学校学生管理系统的自动登录
- Leetcode Group Anagrams两种解法
- Android里面的匿名类与匿名内部类使用
- hiho101周 搜索四·跳舞链
- hdu 4508/hdu 4509 湫湫系列故事——减肥记
- 《剑指offer》:[39-1]判断是否为平衡二叉树
- 找window两种方法
- 几种排序的复杂度
- 《Java小游戏实现》:坦克大战