Python爬虫—破解JS加密的Cookie

news2025/1/16 20:51:25

前言

在进行网站数据爬取时,很多网站会使用JS加密来保护Cookie的安全性,而为了防止被网站反爬虫机制识别出来,我们通常需要使用代理IP来隐藏我们的真实IP地址。

 

本篇文章将介绍如何结合代理IP破解JS加密的Cookie,主要包括以下几个方面:

  • 什么是Cookie
  • 什么是JS加密的Cookie
  • 什么是代理IP
  • 破解JS加密的Cookie的方法及实现
  • 如何使用代理IP进行网站数据爬取

首先,我们来了解一下什么是Cookie。

1. 什么是Cookie

Cookie是服务器向客户端发送的一小段数据,客户端将其存储在本地,下次请求时会将这个数据发送给服务器,用于识别用户身份、保存用户设置等。

我们可以通过浏览器的开发者工具查看网站的Cookie信息。

在Chrome浏览器中,可以通过F12进入开发者工具,在Application选项卡下的Cookies中查看网站的Cookie信息。

2. 什么是JS加密的Cookie

为了增强Cookie的安全性,很多网站会使用JS加密来保护Cookie。JS加密的原理是在服务器端生成一个密钥,并将其传递给客户端,客户端将原始Cookie值使用密钥进行加密后发送给服务器,服务器接收到加密的Cookie值后使用密钥进行解密。

这样,即使Cookie被截获,也无法被恶意用户轻易地解密。

下面是一个使用JS加密的Cookie的例子:

function encryptCookie(value, secretKey) {
  return CryptoJS.AES.encrypt(value, secretKey).toString();
}
var secretKey = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encryptCookie(value, secretKey);

在上面的代码中,encryptCookie函数使用CryptoJS库对原始Cookie值进行AES加密,而secretKey是在服务器端生成的密钥。

3. 什么是代理IP

代理IP是一个位于我们计算机和互联网之间的中间人,我们通过代理服务器发送请求,代理服务器再将请求发送给目标服务器,从而隐藏我们的真实IP地址和位置。

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,从而提高我们的爬取成功率。

4. 破解JS加密的Cookie的方法及实现

破解JS加密的Cookie的方法有很多种,这里我们介绍一种比较简单的方法。

首先,我们需要找到网站使用的JS加密算法及密钥。我们可以通过查看网站源码或者使用浏览器的开发者工具来获取这些信息。

下面是一个使用CryptoJS库进行AES加密的例子:

function encrypt(value, key) {
  return CryptoJS.AES.encrypt(value, key).toString();
}
var key = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encrypt(value, key);

在上面的代码中,key就是服务器端生成的密钥,我们可以将其复制下来。

接着,我们需要写一个脚本来破解加密的Cookie。具体实现如下:

import requests
import re
import base64
from Crypto.Cipher import AES

# 构造请求头和代理IP
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {
    'http': 'http://username:password@ip:port',
    'https': 'http://username:password@ip:port'}

# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)

# 获取密钥和加密后的Cookie值
pattern = re.compile('var key = \'(.*?)\';.*?document.cookie = \'auth=(.*?)\';', re.S)
result = re.search(pattern, response.text)
key = base64.b64decode(result.group(1))
cipher_text = base64.b64decode(result.group(2))

# 解密Cookie值
cipher = AES.new(key, AES.MODE_ECB)
plain_text = cipher.decrypt(cipher_text).decode('utf-8').rstrip('\0')

# 输出解密后的Cookie值
print(plain_text)

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站源码,使用正则表达式获取密钥和加密后的Cookie值。接着,我们使用base64库对密钥和加密后的Cookie值进行解码,再使用Crypto库的AES模块进行解密。

最后,我们将解密后的Cookie值输出即可。

需要注意的是,由于JS加密的Cookie的安全性比较高,因此破解的成功率较低,需要根据具体情况进行调整。同时,破解JS加密的Cookie也会涉及到一些法律问题,我们需要在遵守法律的前提下进行破解。

5. 如何使用代理IP进行网站数据爬取

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,但同时也会带来一些问题,比如代理IP的稳定性和质量等。

在使用代理IP进行网站数据爬取时,我们需要注意以下几点:

  1. 选择稳定的代理IP供应商,确保代理IP的质量和稳定性。
  2. 对代理IP进行定期检测,以确保代理IP的可用性。
  3. 避免频繁地使用同一个代理IP,以免被目标网站识别出来。
  4. 如需使用多个代理IP,可以使用代理IP池来管理代理IP,定时删除不可用的代理IP并添加新的代理IP。

下面是一个使用代理IP进行网站数据爬取的例子:

import requests

# 构造请求头和代理IP
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {
    'http': 'http://username:password@ip:port',
    'https': 'http://username:password@ip:port'}

# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)

# 解析返回的数据
data = response.text

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站数据。需要注意的是,调用requests库时需要指定proxies参数,将代理IP加入到请求中。

最后,我们可以解析返回的数据并做相应的处理。

总结

本篇文章介绍了如何结合代理IP破解JS加密的Cookie和如何使用代理IP进行网站数据爬取,希望对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复亚智能打造全新云平台:让无人机任务管理更智能、更简单

复亚智能全新升级的MindView云平台,对航线规划、任务管理、自动飞行、数据管理等各个环节开展可视化、数字化、智能化监管,从任务到结果的“看得清”、“管得住”、“查得准”,带来更轻松的操作,改善作业效率、安全保障和用户体验…

Git标签

一、分离头指针 假如我们的代码现在处于第四个节点C4上,我们想要回到第二个节点C2的代码 git switch [节点码前几位] --detach # 回到指定节点 这时我们就能看到通过HEAD指针指向C2节点回到C2节点的代码。 当我们头指针没有指向某个分支的头部时,这种…

4、链表。

哈希表介绍 哈希表的简单介绍 1)哈希表在使用层面上可以理解为一种集合结构 2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3)如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫UnOrderedMap) 4)有无伴随数据,是HashMap和Has…

一个 OpenTiny,Vue2 Vue3 都支持!

大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端、跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营。 今天给大家介绍如何同时在 Vue2 和 Vue3 项目中使用 TinyVue。 TinyVue 是一套跨端、跨框架的企业级 UI…

AI深度学习部署全记录

AI部署流程,以PyTorch为例: 1.Torch.Model->ONNX->ONNXSIM->TensortRT->落地 2.Torch.Model->Pt->ONNX->ONNXRunTime->落地 3.Torch.Model->Pt->Libtorch->落地 4.Torch.Model->PNNX->TensorRT->落地 5.…

途乐证券|七大科技巨头,股价集体下跌!国际油价大跌!这一夜发生了啥?

当地时间周三,受前一天惠誉评级下调美国长时间外币发行人违约评级影响,金融商场危险偏好遭到按捺,全球股票、多数大宗产品等危险资产价格普跌,美国三大股指集体跌落。到收盘,道指跌0.98%,标普500指数跌1.38…

【2023年电赛】运动目标控制与自动追踪系统(E 题)最简单实现

本方案的思路是最简单的不涉及复杂算法:识别矩形框,标记矩形框,输出坐标和中心点,计算长度,控制舵机移动固定长度!仅供完成基础功能参考,不喜勿喷! # 实现运动目标控制与自动追踪系…

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制,基本概念,讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制,应用的场景,搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …

Windows驱动开发必备工具

Windows驱动开发必备工具 设备树文软件 可以查看设备信息 数字签名工具安装包 开发用的数字签名证书密钥 断点命中工具包(双机调试必备) 二进制文件解析工具 日志查看工具(必备) IRP查看工具 C驱动开发相关书籍 有需要工具、书籍…

零基础也能懂:用9个简单步骤解说Spring MVC运行流程!

大家好,我是小米!今天,我将带你深入探索 Spring MVC 的运行流程,让你对这个技术有更深刻的理解。无需担心,我会用简单易懂的语言,详细解释每个步骤,让你信心满满地迎接校招面试的挑战&#xff0…

安装金蝶云星空出错 T_META FORMENUMITEM

找不到对象"T_META FORMENUMITEM”,因为它不存在或者你没有所需的权限 解决方案 如果出现以下问题

闲人闲谈PS之四十五——锁表功能引发的“血案”

惯例闲话:这次不说闲话了,刚刚解决一个系统事故级别的问题,没被领导问责已经很幸运了。 分享下处理问题的过程 事件经过 和往常一样,早上闲人打开电脑第一件事情是打开SAP,查看系统日志,结果跳出来一大堆…

DP学习第六篇之下降路径最小和

DP学习第六篇之下降路径最小和 931. 下降路径最小和 - 力扣(LeetCode) 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾,。。。 dp[i][j]: 到达[i, j]位置时,此时的最小下降路径和 状态转移方程 ti…

富文本粘贴图片改为图片上传的方式

代码 <template><div><el-upload:action"uploadUrl":before-upload"handleBeforeUpload":on-success"handleUploadSuccess":on-error"handleUploadError"name"file":show-file-list"false":heade…

RPC框架引入zookeeper服务注册与服务发现

Zookeeper概念及其作用 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是大数据生态中的重要组件。它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理…

海外ASO优化之如何提高应用的可见度和安装量

关键词的投放能够激励用户通过搜索查询找到我们的应用程序&#xff0c;安装它并在他们的设备上运行它。如果有足够的流量&#xff0c;应用程序在搜索中的某些关键词的排名将会提升&#xff0c;并且有助于提高我们应用程序的知名度和自然下载量。 1、选择正确的关键词来提升。 …

【韩顺平】JDBC

第一节 JDBC概述 1.1 JDBC原理图 Java不可能具体地去操作数据库&#xff0c;因为数据库有许多种&#xff0c;直接操作数据库是一种很低效且复杂的过程。 因此&#xff0c;Java引入JDBC&#xff0c;规定一套操作数据库的接口规范&#xff0c;从而要求数据库厂商去实现JDBC接口。…

金鸣识别将无表格线的图片转为excel的几个常用方案

我们知道&#xff0c;金鸣识别要将横竖线齐全的表格图片转为excel非常简单&#xff0c;但要是表格线不齐全甚至没有表格线的图片呢&#xff1f;这就没那么容易了&#xff0c;在识别这类图片时&#xff0c;我们一般会使用以下的一种或多种方法进行处理&#xff1a; 1. 基于布局…

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法&#xff0c;一般推荐使用fctix5&#xff0c;相比于其他的输入法&#xff0c;这款输入法的推荐词要好得多&#xff0c;而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》&#xff0c;我是根据这篇文章的教…

网络安全--原型链污染

目录 1.什么是原型链污染 2.原型链三属性 1&#xff09;prototype 2)constructor 3)__proto__ 4&#xff09;原型链三属性之间关系 3.JavaScript原型链继承 1&#xff09;分析 2&#xff09;总结 3)运行结果 4.原型链污染简单实验 1&#xff09;实验一 2&#xff0…