Python模拟登录WUST教务处
作者:互联网
Python模拟登录WUST教务处
code
import requests
import json
def main():
"""第一次请求,获取加密的dataStr,以及cookie
url1生成一段加密字符串
url2登录的界面
获取响应头的cookie, 需要注意的是响应头是一个 <class 'requests.structures.CaseInsensitiveDict'>
需要转换为字典然后取出对应的cookie
"""
url1 = 'http://bkjx.wust.edu.cn//Logon.do?method=logon&flag=sess'
url2 = 'http://bkjx.wust.edu.cn/Logon.do?method=logon'
r1 = requests.get(url1)
print(r1.headers)
cookie = dict(r1.headers)['Set-Cookie']
dataStr = r1.text
# 按照登录页面上的JS代码进行模拟获取加密的encoded
scode = dataStr.split('#')[0]
sxh = dataStr.split('#')[1]
username = '账号'
password = '密码'
code = username + '%%%' + password
encode = ''
i = 0
while i < len(code):
if i < 20:
encode += code[i:i + 1] + scode[0:int(sxh[i:i + 1])]
scode = scode[int(sxh[i:i + 1]):len(scode)]
else:
encode += code[i:len(code)]
break
i += 1
print(encode)
# 接下来, 请求实际的Post url
data = {
'userAccount': '',
'userPassword': '',
'encoded': encode
}
headers = {
'Cookie': cookie
}
r2 = requests.post(url2, data=data, headers=headers)
print(r2.text)
# print(r2.url)
# var scode=dataStr.split("#")[0];
# var sxh=dataStr.split("#")[1];
# var code=document.getElementById("userAccount").value+"%%%"+document.getElementById("userPassword").value;
# var encoded="";
# for(var i=0;i<code.length;i++){
# if(i<20){
# encoded=encoded+code.substring(i,i+1)+scode.substring(0,parseInt(sxh.substring(i,i+1)));
# scode = scode.substring(parseInt(sxh.substring(i,i+1)),scode.length);
# }else{
# encoded=encoded+code.substring(i,code.length);
# i=code.length;
# }
# }
if __name__ == '__main__':
main()
教务处的登录加密的方法,写在了登录界面的js中:
$.ajax( {
url:strUrl,
type:"post",
cache:false,
dataType:"text",
success:function(dataStr) {
if(dataStr=="no"){
return false;
}else{
var scode=dataStr.split("#")[0];
var sxh=dataStr.split("#")[1];
var code=document.getElementById("userAccount").value+"%%%"+document.getElementById("userPassword").value;
var encoded="";
for(var i=0;i<code.length;i++){
if(i<20){
encoded=encoded+code.substring(i,i+1)+scode.substring(0,parseInt(sxh.substring(i,i+1)));
scode = scode.substring(parseInt(sxh.substring(i,i+1)),scode.length);
}else{
encoded=encoded+code.substring(i,code.length);
i=code.length;
}
}
document.getElementById("encoded").value=encoded;
if("logon"!="logonLdap"){
document.getElementById("userPassword").value="";
document.getElementById("userAccount").value="";
}
document.getElementById("loginForm").submit();
}
},
error:function() {
alert("计算异常!");
}
});
所以我们可以写一个类似的函数,然后得到我们需要的加密encode,同时这个界面还会返回给我们一个cookie,然后我们登录的时候只需要带着cookie和encoded
就可以实现成功登录了。
标签:code,Python,substring,WUST,scode,encoded,var,教务处,dataStr 来源: https://blog.csdn.net/weixin_45750972/article/details/116197525