今日内容:
js 解密,
selenium 进行 iframe 切换
selenium 执行js代码
给 selenium 添加 ua 添加代理ip
selenium 处理 cookie
selenium 案例 ---斗鱼 (用selenium 进行翻页 )
js2py 的简单使用:
1 import js2py 2 ''' 3 js2py 的简单使用! 4 ''' 5 #1 创建 js的环境对象 6 js_env_obj = js2py.EvalJs() 7 8 #2 要执行的js代码 9 js_code_str = ''' 10 function add(a, b) { 11 return a+b; 12 } 13 ''' 14 15 #3 用环境执行下 js代码 16 js_env_obj.execute(js_code_str) 17 #4 使用js 里的函数 18 res = js_env_obj.add(1,3) 19 print(res)
1 import js2py 2 ''' 3 js2py 的简单使用! 4 ''' 5 #1 创建 js的环境对象 6 js_env_obj = js2py.EvalJs() 7 8 js_env_obj.name = "tom" 9 10 #2 要执行的js代码 11 js_code_str = ''' 12 function add(a, b) { 13 14 return a+b; 15 } 16 function test(){ 17 return name; 18 } 19 ''' 20 21 #3 用环境执行下 js代码 22 js_env_obj.execute(js_code_str) 23 #4 使用js 里的函数 24 res = js_env_obj.test() 25 print(res)
破解js 的流程:
1 import requests 2 import js2py 3 4 if __name__ == '__main__': 5 js_env = js2py.EvalJs() 6 7 # 定义session 它可以自动保存cookie 8 session = requests.session() 9 session.headers = { # 注意,ua 一定得是 移动端的! 10 "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Mobile Safari/537.36 " 11 } 12 # 发送 rKey url 获取 rKey 的值 GET 13 rKey_url = "http://activity.renren.com/livecell/rKey" 14 js_env.n = session.get(rKey_url).json()["data"] # 关键的数据n ! 15 js_env.t = { # 关键数据t 16 "phoneNum":"18337895201", 17 "password":"123456", 18 "c1":0, 19 } 20 # 两个js 文件的获取 21 bigInt_url = "http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/BigInt.js" 22 rsa_url = "http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/RSA.js" 23 bigInt_js_code = session.get(bigInt_url).content.decode("utf8") 24 rsa_js_code = session.get(rsa_url).content.decode("utf8") 25 26 barrettmu_url = "http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/Barrett.js" #rsa js文件中 内嵌的文件 ! 27 barrettmu_js_code = session.get(barrettmu_url).content.decode("utf8") 28 29 # 执行 下两个 js代码 30 js_env.execute(bigInt_js_code) 31 js_env.execute(rsa_js_code) 32 js_env.execute(barrettmu_js_code) 33 34 js_core_code = ''' 35 t.password = t.password.split("").reverse().join(""), 36 setMaxDigits(130); 37 var o = new RSAKeyPair(n.e,"",n.n); 38 r = encryptedString(o, t.password); 39 t.password = r, 40 t.rKey = n.rkey 41 ''' 42 # 执行 加密的代码 43 js_env.execute(js_core_code) # {'password': '12bf10409de3cdc31ded2dfd32a1ba836a66e8ac8ad5fe13754da42452155b5a', 'c1': 0, 'rKey': '39b392090c635431e86ef76d46f31f40', 'phoneNum': '18337895201'} 44 # print(js_env.t) 45 # print(type(js_env.t)) # 它不是 python中的字典, <class 'js2py.base.JsObjectWrapper'> 46 # print(dir(js_env.t)) # 但是 对象 的字典中 有 转成字典的 方法 to_dict , 也有转向列表的方法 to_list ['__bool__', '__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_obj', '_prop_of', 'to_dict', 'to_list'] 47 48 data = js_env.t.to_dict() # data 才是我们最终要的数据! 49 # print(data) 50 51 #下面 我们有了账户 和 加密后的密码, 就可以登录了。 52 login_url = "http://activity.renren.com/livecell/ajax/clog" 53 session.post(login_url,data = data) # 此时,如果登录成功,cookie 也就自动保存了。 54 55 56 # 下面 就可以 带着cookie 来进 个人中心了 http://activity.renren.com/myprofile 57 person_center_url = "http://activity.renren.com/myprofile" 58 person_center_data_str = session.get(person_center_url).content.decode("utf8") 59 60 with open("renren.html","w",encoding="gbk") as f: 61 f.write(person_center_data_str)
chrome 无头浏览器:
1 from selenium import webdriver 2 3 if __name__ == '__main__': 4 # 1,创建浏览器对象 5 driver = webdriver.Chrome() 6 # 2,发请求 7 driver.get("http://www.json.com/") 8 9 # 3,获取数据 10 data_str = driver.page_source 11 print(data_str) 12 13 # 4,关闭浏览器 14 driver.quit()
设置无头浏览器(无界面)
1 from selenium import webdriver 2 3 if __name__ == '__main__': 4 5 options = webdriver.ChromeOptions() 6 options.add_argument("--headless") 7 # 1,创建浏览器对象 8 driver = webdriver.Chrome(options = options) 9 # 2,发请求 10 driver.get("http://www.json.com/") 11 12 # 3,获取数据 13 data_str = driver.page_source 14 print(data_str) 15 16 # 4,关闭浏览器 17 driver.quit()
就用这个就可以!
pass