• <i id='4ARzy'><tr id='4ARzy'><dt id='4ARzy'><q id='4ARzy'><span id='4ARzy'><b id='4ARzy'><form id='4ARzy'><ins id='4ARzy'></ins><ul id='4ARzy'></ul><sub id='4ARzy'></sub></form><legend id='4ARzy'></legend><bdo id='4ARzy'><pre id='4ARzy'><center id='4ARzy'></center></pre></bdo></b><th id='4ARzy'></th></span></q></dt></tr></i><div id='4ARzy'><tfoot id='4ARzy'></tfoot><dl id='4ARzy'><fieldset id='4ARzy'></fieldset></dl></div>

    1. <small id='4ARzy'></small><noframes id='4ARzy'>

        <bdo id='4ARzy'></bdo><ul id='4ARzy'></ul>
      <tfoot id='4ARzy'></tfoot>
      <legend id='4ARzy'><style id='4ARzy'><dir id='4ARzy'><q id='4ARzy'></q></dir></style></legend>

        Python爬虫如何破解JS加密的Cookie

        时间:2023-12-18
        • <bdo id='oQ62T'></bdo><ul id='oQ62T'></ul>
            <i id='oQ62T'><tr id='oQ62T'><dt id='oQ62T'><q id='oQ62T'><span id='oQ62T'><b id='oQ62T'><form id='oQ62T'><ins id='oQ62T'></ins><ul id='oQ62T'></ul><sub id='oQ62T'></sub></form><legend id='oQ62T'></legend><bdo id='oQ62T'><pre id='oQ62T'><center id='oQ62T'></center></pre></bdo></b><th id='oQ62T'></th></span></q></dt></tr></i><div id='oQ62T'><tfoot id='oQ62T'></tfoot><dl id='oQ62T'><fieldset id='oQ62T'></fieldset></dl></div>

            <tfoot id='oQ62T'></tfoot>

                <tbody id='oQ62T'></tbody>
            1. <legend id='oQ62T'><style id='oQ62T'><dir id='oQ62T'><q id='oQ62T'></q></dir></style></legend>

                <small id='oQ62T'></small><noframes id='oQ62T'>

                1. Python爬虫如何破解JS加密的Cookie

                  在使用Python进行网站爬取时,经常会遇到JS加密的Cookie。这时就需要使用一些技巧来破解Cookie。下面是Python爬虫如何破解JS加密的Cookie的完整攻略,包括以下几个步骤:

                  1. 分析Cookie加密方式

                  首先,我们需要了解网站的Cookie加密方式。通常,网站采用JS代码动态生成Cookie,然后通过Ajax发送给服务器。这时我们需要分析JS代码来确定Cookie加密算法。

                  我们可以使用浏览器的开发者工具或者Chrome插件 EditThisCookie 查看cookie的值,然后观察cookie的值是否经过加密处理。如果cookie的值经过了加密处理,那么我们就需要找到加密算法,并使用Python代码实现。

                  2. 使用Python模拟请求

                  在确定加密算法后,我们需要使用Python模拟请求,获取加密后的Cookie值。通常,我们可以使用 requests 模块来发送请求,然后通过解析响应数据,获取Cookie的值。

                  3. 逆向加密算法

                  得到加密后的Cookie值后,我们需要对Cookie值进行解密。这时,我们需要逆向加密算法,找到加密算法的逆运算。逆向加密算法通常涉及到一些高级技术,例如反汇编、调试器等。

                  如果加密算法比较简单,我们可以手动逆向加密算法,并编写Python代码实现。如果加密算法比较复杂,我们可以考虑使用 pyv8 库实现JS代码的执行,或者使用 selenium 模拟浏览器操作。

                  示例一:破解网站v2ex.com的JS加密Cookie

                  以下是一个示例,我们在获取v2ex.com的Cookie值时,会发现Cookie值经过了一定的加密处理。我们可以查看网站的JS代码,发现加密算法位于 http://www.v2ex.com/app/tpl/ 目录下的 index.js 文件中。

                  具体来说,在 index.js 文件中,通过如下代码加密Cookie值:

                  var _4 = "";
                  for (var _5 = 0; _5 < 3; _5++) {
                      _4 += String.fromCharCode(Math.random() * 26 + "a".charCodeAt(0))
                  }
                  var _6 = new Date().getTime();
                  var _7 = _6 + "" + parseInt(Math.random() * 1000);
                  var _8 = hex_md5(_7 + _4);
                  

                  这段代码包含了两个加密操作:生成一个随机字符串,然后使用该随机字符串和当前时间戳拼接生成一个字符串,并对该字符串使用 md5 加密。接着,我们可以编写Python代码模拟请求,获取加密后的Cookie值:

                  import requests
                  
                  url = 'http://www.v2ex.com/'
                  
                  # 模拟请求,获取cookie
                  session = requests.session()
                  response = session.get(url)
                  cookie = response.cookies.get_dict()
                  cookie_value = cookie['2fm']
                  

                  这里,我们使用了 requests 库模拟请求,获取Cookie值。从响应中获取的Cookie值是经过加密处理的。接着,我们可以解密Cookie值:

                  import hashlib
                  
                  # 解密cookie
                  ts = cookie_value[:13]
                  nonce = cookie_value[13:16]
                  sig = cookie_value[16:]
                  
                  reverse_sig = sig[::-1]
                  reverse_nonce = nonce[::-1]
                  
                  sig_value = reverse_sig[:10] + reverse_nonce + reverse_sig[10:]
                  
                  hash_value2 = hashlib.md5()
                  hash_value2.update(ts.encode())
                  hash_value2.update(bytes.fromhex(sig_value))
                  cookie_value_decrypted = f'{ts}{nonce}{hash_value2.hexdigest()}'
                  
                  print(cookie_value_decrypted)
                  

                  这里,我们首先从加密后的Cookie值中,提取出时间戳、随机字符串和加密字符串。接着,我们根据加密算法,进行逆向操作,将加密字符串进行解密。最后,我们得到了解密后的Cookie值。

                  示例二:破解网站zhihu.com的JS加密Cookie

                  以下是另一个示例,我们在获取zhihu.com的Cookie值时,会发现Cookie值同样经过了加密处理。不同的是,我们需要使用JS代码实现逆向加密算法。

                  具体来说,在获取zhihu.com的Cookie值时,我们可以模拟登录操作,并附带Cookie信息。在登录成功后,我们可以通过Chrome开发工具查看Cookie。查看Cookie时我们会看到Cookie的值包含了一个 _zap 前缀,该前缀是加密后的字符串。接着,我们可以从zhihu.com的JS代码中找到加密算法。

                  以下是zhihu.com的加密算法:

                  window.btoa(unescape(encodeURIComponent(JSON.stringify({data: "encrypted_data"}))))
                  

                  该加密算法使用了 window.btoa() 进行Base64编码,然后使用 unescape() 对编码值进行解码。Base64编码的数据里面包含了 encrypted_data,是实际的Cookie值。

                  我们可以使用 PyV8 库来实现JS代码的执行,也可以使用 selenium 模拟浏览器操作来实现JS代码的执行,接着获取加密后的Cookie值,并进行解密。具体实现方法可以参考如下代码:

                  import requests
                  import execjs
                  import json
                  
                  url = 'https://www.zhihu.com/signin'
                  
                  # 模拟登录
                  session = requests.session()
                  session.headers.update({
                      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
                  })
                  response = session.get(url)
                  
                  # 执行JS代码
                  js = response.text
                  
                  ctx = execjs.compile(js)
                  encrypted_data = ctx.eval('window.btoa(unescape(encodeURIComponent(JSON.stringify({data: "encrypted_data"})))))')
                  
                  # 解密
                  cookie_value = f'_zap={encrypted_data}'
                  decoded_data = base64.b64decode(cookie_value[5:])
                  json_data = json.loads(decoded_data)
                  cookie_value_decrypted = json_data.get('data', '')
                  
                  print(cookie_value_decrypted)
                  

                  在上面的代码中,我们在模拟登录之后,执行JavaScript代码获得加密后的Cookie值,并使用 base64.b64decode() 对加密数据进行解码。在解码后的数据中提取出 encrypted_data,这就是实际的Cookie值。最后,我们对该值进行解密,得到了解密后的Cookie值。

                  总之,Python爬虫如何破解JS加密的Cookie,需要熟练掌握JS加密算法、逆向算法和Python模拟请求等技术。在实践中,需要根据实际情况进行实现和优化。

                  上一篇:用Python提取PDF表格的方法 下一篇:Python一行代码实现生成和读取二维码

                  相关文章

                  1. <legend id='2falx'><style id='2falx'><dir id='2falx'><q id='2falx'></q></dir></style></legend>
                  2. <i id='2falx'><tr id='2falx'><dt id='2falx'><q id='2falx'><span id='2falx'><b id='2falx'><form id='2falx'><ins id='2falx'></ins><ul id='2falx'></ul><sub id='2falx'></sub></form><legend id='2falx'></legend><bdo id='2falx'><pre id='2falx'><center id='2falx'></center></pre></bdo></b><th id='2falx'></th></span></q></dt></tr></i><div id='2falx'><tfoot id='2falx'></tfoot><dl id='2falx'><fieldset id='2falx'></fieldset></dl></div>
                      <bdo id='2falx'></bdo><ul id='2falx'></ul>
                  3. <tfoot id='2falx'></tfoot>

                    1. <small id='2falx'></small><noframes id='2falx'>