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

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

 

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

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

在上述的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文件;全部下载;

 

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返回密码加密后的值;

 

 

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值