返回顶部

day 06 爬虫

今日内容:

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)
View Code

 

 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环境变量对象中 添加变量~

 

破解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)
解决 人人网的 js 加密

 

 

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()
selenium 的回顾

 

设置无头浏览器(无界面)

 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 

posted @ 2019-12-25 13:46  Zcb0812  阅读(156)  评论(0编辑  收藏  举报