coding=utf-8
“”"
author:lei
function:
“”"
import requests
import js2py
import json
def login():
# 创建session对象
session = requests.session()
# 设置请求头
session.headers = {“User-Agent”: “Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1”}
# 发送获取公钥数据包的get请求
response = session.get("http://activity.renren.com/livecell/rKey")
print(response.content)
# 创建n
n = json.loads(response.content)["data"]
# 创建t
t = {
"password": "4234234"
}
# 获取前置js代码
rsa_js = session.get("http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/RSA.js").content.decode()
bigint_js = session.get("http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/BigInt.js").content.decode()
barrett_js = session.get("http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/Barrett.js").content.decode()
# 创建js环境对象
context = js2py.EvalJs()
# 将变量和js代码加载到环境对象中执行
context.execute(rsa_js)
context.execute(bigint_js)
context.execute(barrett_js)
context.n = n
context.t = t
# 将关键js代码放到环境对象中执行
pwd_js = """
t.password = t.password.split("").reverse().join(""),
setMaxDigits(130);
var o = new RSAKeyPair(n.e,"",n.n)
, r = encryptedString(o, t.password);
"""
context.execute(pwd_js)
# 获取加密密码
print(context.r)
# 构建form表单
form_data = {
"phoneNum": "169656565",
"password": context.r,
"c1": -100,
"rKey": n["rkey"]
}
print(form_data)
# 发送post请求,模拟登陆
response = session.post("http://activity.renren.com/livecell/ajax/clog", data=form_data)
# 验证
print(response.content.decode())
if name == ‘main’:
login()