• 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 

  • 相关阅读:
    spring 之 AOP
    spring 之 动态代理
    为 NSDate 添加扩展类 判断时间
    iOS 日期相关总结
    iOS 请求出现 "Request failed: bad request (400)"
    NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 解决办法
    poj-3302
    辽宁省赛——杨鲁斯卡尔专场-J
    辽宁省赛——杨鲁斯卡尔专场 -F
    zzuli训练赛_05_13-D
  • 原文地址:https://www.cnblogs.com/zach0812/p/12051881.html
Copyright © 2020-2023  润新知