java 爬虫 登陆_Java爬虫模拟登录——不给我毛概二的H某大学

发布于:2023-07-27 ⋅ 阅读:(102) ⋅ 点赞:(0)

你的账号访问太频繁,请一分钟之后再试!

从大一开始

就用脚本在刷课

在专业课踢的只剩下一门C#的情况下

活活刷到一周的课

85c5eea984f8bc103ebcf89f1993f2bb.png

大二开始教务系统多了一个非常**的操作

退课池 and 访问频繁缓冲

难道,我大三下还要去学政治课咩?

虽然学政治不如敲代码

但我想毕业啊

4b5424c0cb331d08cc8ab94fe9e72dc6.png

emmmmmm

在量子力学的角度,没有抢上毛概的我只是我本体的一个属性,和我本身没有多大关系,我还是快乐敲代码吧。

0.教务系统后台登录流程

先来看一下后台账号密码在发送给服务器之前做了什么处理

2543dbafb5bb621cddac5fd3e93d6ceb.png

这是文中的JS代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 j$(document).ready(function(evt){2 //初始化验证码

3 refreshImg();4 //判断操作系统是32位或64位,设置兼容性文件的下载

5 var cpu =getCPU();6 if (cpu != "x64"){7 j$("#setjw").attr("href","../custom/lodop/setjw32.zip");8 } else{9 j$("#setjw").attr("href","../custom/lodop/setjw.zip");10 }11 //Enter键转TAB

12 kutil.enter2tab("LoginForm");13 //定位焦点

14 j$("#yhmc").focus();15 })16

17 functiondoLogon() {18

19 //输入信息验证

20 if (!validate()) {21 return false;22 }23

24 //验证码正确性验证

25 var username = j$("#yhmc").val();26 var password = j$("#yhmm").val();27 var randnumber = j$("#randnumber").val();28 var passwordPolicy =kutil.isPasswordPolicy(username, password);29 var url = _webRootPath + "cas/logon.action";30 password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));31 /**32 var params = {33 "yhmc" : username,34 "yhmm" : password,35 "randnumber": randnumber,36 "isPasswordPolicy" : passwordPolicy37 };38 */

39 var p_username = "_u"+randnumber;40 var p_password = "_p"+randnumber;41 username = base64encode(username+";;"+_sessionid);42 var params = p_username+"="+username+"&"+p_password+"="+password+"&randnumber="+randnumber+"&isPasswordPolicy="+passwordPolicy ;43 //alert("params="+params);

44 //params = getEncParams(params);

45 //alert("encparams="+params);

46 doPreLogon();47 kutil.doAjax(url, params, doPostLogon);48

49 functiondoPreLogon(){50 j$("#msg").html("正在登录......");51 j$("#login").attr("disabled", true);52 j$("#reset").attr("disabled", true);53 }54

55 functiondoPostLogon(response) {56 var data =JSON.parse(response);57 var status =data.status ;58 var message =data.message ;59 if ("200" ==status) {60 var result =data.result ;61 window.document.location.href =result ;62 } else{63 reloadScript("kingo_encypt",_webRootPath+"custom/js/SetKingoEncypt.jsp");64 if("407" ==status){65 alert(message);66 showMessage("");67 }else{68 showMessage(message);69 }70 j$("#login").attr("disabled", false);71 j$("#reset").attr("disabled", false);72 refreshImg();73 if ("401"==status) {74 j$("#randnumber").val("");75 j$("#randnumber").focus();76 } else{77 j$("#yhmc").val("");78 j$("#yhmm").val("");79 j$("#randnumber").val("");80 j$("#yhmc").focus();81 }82 }83 }84 }85

86 functionvalidate() {87 var username = j$("#yhmc").val();88 var password = j$("#yhmm").val();89 var randnumber = j$("#randnumber").val();90 if(kutil.isNull(username)) {91 showMessage("请输入用户名!");92 j$("#yhmc").focus();93 return false;94 }95 if(kutil.isNull(password)) {96 showMessage("请输入密码!");97 j$("#yhmm").focus();98 return false;99 }100 if(kutil.isNull(randnumber)) {101 showMessage("请输入验证码!");102 j$("#randnumber").focus();103 return false;104 }105 return true;106 }107

108 //重置密码为账号(找回密码)

109 functiondoReset() {110 var tourl = _webRootPath + "frame/retrievePassword.jsp";111 window.document.location.href =tourl ;112 }113

114 /**115 * 刷新验证码116 */

117 functionrefreshImg(){118 var url = _webRootPath + "cas/genValidateCode?dateTime="+(newDate());119 document.getElementById("randpic").src =url ;120 }121

122 functionshowMessage(message){123 $("msg").innerHTML =message;124 setTimeout("$('msg').innerHTML='';",15000);125 }126

127 functiongologin(e , obj){128 var e = window.event?window.event:e;129 var x=e.keyCode;130 if(x!=13) return false;131 if(x<48||x>57) e.returnValue=false;132 obj.select();133 $("login").onclick();134 }135

136 functiongetCPU()137 {138 var agent=navigator.userAgent.toLowerCase();139 if(agent.indexOf("win64")>=0 || agent.indexOf("wow64")>=0) return "x64";140 returnnavigator.cpuClass;141 }142

View Code

来分析一下每一步

1 //验证码正确性验证

2 var username = j$("#yhmc").val();3 var password = j$("#yhmm").val();4 var randnumber = j$("#randnumber").val();5 var passwordPolicy =kutil.isPasswordPolicy(username, password);6 var url = _webRootPath + "cas/logon.action";7 password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));

这里拿到username,password,randnumber之后是通过kutil.isPasswordPolicy(username,password)来检验规范

passwordPolicy也是表单参数,一般情况为 1即可。

var url = _webRootPath + "cas/logon.action";

url是表单提交处。

password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));

可见密码在输入后会经过一次md5加密,然后将验证码进行一次md加密,拼接到一起之后再进行一次md5加密。

再来看下一部分。

1    var p_username = "_u"+randnumber;2 var p_password = "_p"+randnumber;3 username = base64encode(username+";;"+_sessionid);4 var params = p_username+"="+username+"&"+p_password+"="+password+"&randnumber="+randnumber+"&isPasswordPolicy="+passwordPolicy ;

可以发现输入的学号(用户名)在加入表单之前会把username和sessionid字段用base64进行加密

sessionid从cookie中拿到

那么整个params结构就很清楚了。

注意在表单中键是'_p','_u'和验证码拼接的。

1.点击登录之后的表单分析

这是一份学号验证码输入正确,密码输入错误的栗子

b52bd89c167e03d15d0ec685ba8114bb.png

这个是成功登录的例子

9c9305d1df66c1b3986c58425970e973.png

整个流程已经很明显了

emmmmm至于登录失败的Response,就是下面这个

b3c0399d1688516cdf120aa7f32b0f83.png

2.使用Java进行模拟登录

可能在这之前,你会很好奇验证码怎么拿到

ff7b315a4d0c2b67fe4c37507b529927.png

的确,验证码与时间有关

至于怎么拿

你可以在模拟登录之前先用最简单的爬虫知识去request登录页

dc4b202b124c50cb4e6a60b59dccc99e.png

下面详细来讲模拟登录的流程。

1.如何拿到jsessionid

fdc69837e7199ef9fae07be28ec002e1.png

2.表单的设置

afd32972bb550bd20bdaa69813ecb86e.png

这些就是模拟登录的核心代码了

去年写的代码

注释也是...话说...

28c8c118481db62ce7f3afcf2f64a7f8.png

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到