# 使用js2py模拟登录人人网import requests, js2py, jsondef login(): # 创建session对象(因为后续登录都需要用到请求头和cookies,所以直接用到会话保持) session = requests.session() # 设置请求头 session.headers = { 'user-agent': 'user-agent' } # 发送get请求,获取json数据(这里的数据包含了部分post请求所需要的数据,即data) response = session.get(url='www.baidu.com') # 创建n(通过js代码得知,发送get请求之后,代码将data赋值给了n) n = json.loads(response.content.decode())['data'] # 创建t t = { 'user_num': '1337050665', 'password': 'ssaj23jds' } # 获取前置js代码 rsa_js = session.get('../rsa.js').content.decode() bigint_js = session.get('../BigInt.js').content.decode() barrett_js = session.get('../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) # 获取加密密码 password = context.r # 构建formdata,并发送post请求模拟登陆 formdata = { 'phoneNum': '1337050665', 'password': context.r, 'c1': '-100', 'rkey': n['rkey'] } response = session.post(url='login...', data=formdata) # 检验 print(response.content.decode())if __name__ == '__main__': login()