Python爬虫模拟登录(二):Python执行Js

查看网页源码,发现有相关代码

Python爬虫模拟登录(二):Python执行Js_第1张图片

 

可以看出password的值大概是用RSA以modulus, exponet为公钥加密后的一串字符;

modulus和exponet都是js变量,在浏览器的开发者工具中可以先查看相关值;Console窗口;

Python爬虫模拟登录(二):Python执行Js_第2张图片

在上述的js代码中可以发现modulus,exponet都是来之getPublicKey.do返回的数据;

jQuery.getJSON("getPublicKey.do",function(data){
	modulus = data["modulus"];
	exponent = data["exponent"];
});

requests提交get请求

s = requests.Session()

publickey = s.get(rsaurl).text
publickey = json.loads(publickey)
# print(publickey["exponent"],publickey["modulus"])

这样就得到了modulus,exponet的值;

 

接下来还原js的加密过程,得到最终的值enPassword;

本来想用Python的Crypto库来还原RSA加密过程,失败;

于是选择在Python中执行js,得到加密的值,因为在正常访问时一样是在浏览器中执行的加密过程;

相关库:execjs,参考:pyv8的安装和使用:python中执行js代码

 

网页源代码中可以看到rsa相关的js文件;全部下载;

Python爬虫模拟登录(二):Python执行Js_第3张图片

 

def getEnPwd(modulus, exponent, pwd):
    jsstr = ""
    for filename in os.listdir('./js'):
        f = open('./js/' + filename)
        jsstr += f.read()    # 读取所有的js代码
        f.close()

    ctx = execjs.compile(jsstr)    # .compile
    return ctx.call('getenpwd', modulus, exponent, pwd)    # 调用指定的函数
    # print(ctx.call('enString', '123456'))

 

 

这个函数执行js返回密码加密后的值;

 

 

 

 

你可能感兴趣的:(Python)