Python js的解析
学习目标:
1、了解 定位js的方法;
2、了解 添加断点观察js的执行过程的方法;
3、应用 js2py 获取js的方法;
1 确定js的位置
对于前面人人网的案例,我们知道了url地址中有部分参数,但是参数是如何生产的呢?
毫无疑问,参数肯定是js生产的,那么如何获取这些参数的规律呢?通过下面的学习来了解
2、js2py的使用
在知道了js如何生产我们想要的数据之后,那么接下来我们就需要使用程序获取js执行之后的结果了。
2.1 js2py的介绍
js2py是一个js的翻译工具,也是一个通过纯python实现的js的解释器。
2.2 js的执行思路
js的执行方式大致分为两种:
1)、在了解了js内容和执行顺序之后,通过python来完成js的执行过程,得到结果。
2)、在了解了js内容和执行顺序之后,使用类似js2py的模块来执行js代码,得到结果。
但是在使用python程序实现js的执行时候,需要观察的js的每一个步骤,非常麻烦,所以更多的时候我们会选择使用类似js2py的模块去执行js,接下来我们来使用js2py实现人人网登录参数的获取。
2.3 具体的实现
定位进行登录js代码
import requests
import js2py
import jsondef login():# 创建session对象session = requests.session()# 设置请求头session.headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Mobile Safari/537.36'}# 发送获取公钥数据包的get请求response = session.get('http://activity.renren.com/livecell/rKey')# 创建nn = json.load(response.content)['data']# 创建tt = {'password':'QAZ2wsx#EDC'}# 获取前置 js代码rsa_js = session.get('http://s.xnimg.cn/a85738/wap/wecharLive/js/RSA.js',headers=headers).content.decode()bignit_js =session.get('http://s.xnimg.cn/a85738/wap/wecharLive/js/BigInt.js',headers=headers).content.decode()barrett_js = session.get('http://s.xnimg.cn/a85738/wap/wecharLive/js/Barrett.js',headers=headers).content.decode()# 创建js环境对象context = js2py.EvalJs()# 将变量和js代码加载到环境对象中执行context.execute(rsa_js)context.execute(bignit_js)context.execute(barrett_js)context.n=ncontext.t=t# 将关键js代码放到环境对象中执行pwd_js = """t.password = t.password.split("").reverse().join("")setMaDigits(130)var o = new RSAKeyPair(n.e,"",n.n), r = encryptedString(o,t.password);"""context.execute(pwd_js)# 获取加密密码# 构建formdataformdata = {"phoneNum":"171173805860","password":"context.r","c1":-100,"rKey":n['rKey']}print(formdata)# 发送post请求,模拟登录response = session.post('http://activity.renren.com/livecell/ajax/clog',data=formdata)# 验证print(response.content.decode())if __name__ == '__main__':login()
模拟加密python中实现
import hashlibdata = 'python39'# 创建 hash 对象
md5 = hashlib.md5()
# 向hash 对象中添加需要做hash运算的字符串
md5.update(data.encode())
# 获取字符串的hash值
result = md5.hexdigest()print(result)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
