爬虫与反爬-Ja3指纹风控(Just a moment...)处理方案及参数说明

概述:本文将针对 Ja3 指纹检测风控进行处理,举例了一个案例并使用两种不同的破解方案进行突破,同时深入了解指纹间不同字符所代表的含义

指纹检测背景:

1、每一个设备、软件都有独属于自己的设备信息、版本号、加密算法、椭圆算法等等,而ja3指纹就是将这些信息进行了一个非常复杂的计算后得到的产物,在不做特殊处理的情况下,部分网站会短时间内大量相同指纹的请求视为爬虫进行封禁。

2、在使用requests这个模块的时候,由于requests这个模块底层调用的是ssl进行请求导致ja3指纹无法做出有效的调整,这个是这个模块的缺陷,包括目前市面上对requests进行指纹的修改大部分都是无效的(反编译或修改源文件的除外)

3、突破方案:目前突破的方案有多种

        1、使用大佬改魔改的 curl_cffi 模块进行请求,但这种由于封装的太过于完善了,好处是用法简单,坏处是不能 “随心所欲”;

        2、使用 pyhttpx 或 request-go 等模块进行自定义 ja3 指纹进行请求;

        3、使用 js、go语言发起请求能够有效解决(因为主要讲的是python我这里先pass了)

特征:

1、响应数据里面出现 Just a moment... 等字样

2、在确保参数无问题的情况下对 curl 重放是成功的,但放在 python 或 js 代码中执行失败

好了废话不多说,直接开始

目标网站:aHR0cHM6Ly9waXhhYmF5LmNvbQ==

======= 正文开始 =======

一、首先对网站进行请求,确认风控类型

复制 curl 转 requests,放在python里请求发现非常明显的特征 Just a moment...,基本上看见这个大概率就确认是指纹检测了

响应结果:

二、风控突破(curl_cffi 模块)

目前市面上是有个国外的大神模拟好主流的浏览器指纹并封装好的模块 —— curl_cffi

官方链接:https://github.com/lexiforest/curl_cffi

优点:用法简单,可以无脑 requests,同时跟requests用法基本一致

缺点:面对较为严格的网站还是会出现无法请求的情况,同时无法自定义指纹

以上述网站为例:

from curl_cffi import requests
url = "https://pixabay.com/zh/videos/search/"
params = {
    "pagi": "13"
}
response = requests.get(url,headers=headers,params=params,impersonate="chrome101")
print(response.text)
print(response)

运行结果:

这个时候响应的结果就正常了,同时他支持以下浏览器的版本:

备注:当出现chrome浏览器过不了的时候可以尝试一下使用苹果的浏览器 safari 说不定有奇效

  • chrome99
  • chrome100
  • chrome101
  • chrome104
  • chrome107
  • chrome110
  • chrome116
  • chrome119
  • chrome120
  • chrome123
  • chrome124
  • chrome99_android
  • edge99
  • edge101
  • safari15_3
  • safari15_5
  • safari17_0
  • safari17_2_ios
  • safari18_0
  • safari18_0_ios

三、风控突破(自定义 ja3 ,pyhttpx模块)

当遇到一个比较强的 ja3 检测的时候,这个时候 curl_cffi 可能效果就会不尽人意,这个时候就需要自己定义一个ja3的指纹来进行访问,这里比较推荐的是使用 pyhttpx 模块,这个模块还有一个很强的地方,就是会固定住请求头的顺序(有部分网站会检测请求头字典的顺序)

1、获取自己的指纹

在实现自定义Ja3之前要先了解指纹,首先获取自己的指纹,这个网站是有非常多的,可以挑一个自己喜欢的

https://tools.scrapfly.io/api/fp/ja3

https://tls.browserleaks.com/json

https://tls.peet.ws/api/clean

2、指纹参数说明

"""
假设ja3指纹是:原始ja3:771,4865-4866-4867-41195-49199-49296-49100-52393-52392-41171-49172-156-157-47-53,65281-18-27-43-0-5-51-13-11-17513-35-41-28-16-10-21,29-23-24,0-1-2
771: tls版本号(0x0303是771的十六进制)
4865-4866-4867-41195-49199-49296-49100-52393-52392-41171-49172-156-157-47-53:加密套件,用于协商在通信中使用的加密算法和参数
65281-18-27-43-0-5-51-13-11-17513-35-41-28-16-10-21:扩展信息,用于提供额外的功能或参数
29-23-24:椭圆曲线算法的标识符列表,用于在密钥交换中选择椭圆曲线算法
0-1-2:压缩算法的标识符列表,用于协商在通信中使用的压缩算法
"""

3、设置自定义的指纹

使用上面的网站获取自己的指纹,然后携带指纹进行请求

代码:

import pyhttpx

ja3 = "771,4865-xxxx-xxx 自己的ja3指纹"
sess = pyhttpx.HttpSession(http2=True, ja3=ja3)
url = "https://pixabay.com/zh/videos/search/"
params = {
    "pagi": "13"
}
response = sess.get(url,headers=headers,params=params)
print(response.text)
print(response)

有一个特别重要的重点!!

扩展信息:65281-18-27-43-0-5-51-13-11-17513-35-41-28-16-10-21中,

41属于会话恢复扩展,打开新的浏览器第一次访问是没有的,只有重新建立tcp连接,才会携带上次的信息,所以在采集的时候一定要把 41 给去掉!!

这也是我在采集目标网站的时候这里踩了很大的坑

携带 41 进行请求,报错 TCP 握手失败

去掉41后请求恢复正常:

 总结:

目前使用 curl_cffi 的方法是比较简单的也很适合小白,但是如果需要进阶一点的话比较推荐pyhttpx,自由度也会更高一点,如果有不懂的或者有爬虫单子的话欢迎私聊。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JUC-JMM】Java Memory Model Java内存模型

Java内存模型--JMM 一、JMM是什么?二、Happens-Before原则三、JMM有什么用? 一、JMM是什么? JMM,全拼Java Memory Model,翻译过来就是Java内存模型。 那么,我们不禁思索,Java内存模型有什么用&…

SpringAI:Java 开发的智能新利器

一、SpringAI 简介 随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架,使得这一集成过程变得前所未有的简单和高效。 本文将深入探…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表,录入的日期格式很混乱,有些看着差不多,但实际多一个空格少一个字符很难发现,希望的理想格式是 1980-01-01,10位,即:“YYYY-mm-dd”,实际上数据表中这样的格式都有 19…

【我在CSDN成长】我的五周年创作纪念日

感叹 五年的时光匆匆而过, 像一阵风,拂过岁月的湖面, 泛起层层涟漪,又悄然离去。 曾经的欢笑与泪水, 那些奋斗的日夜, 如同电影般在脑海中放映, 却已成为遥远的回忆。 五年,说长不长…

Jmeter中的定时器

4)定时器 1--固定定时器 功能特点 固定延迟:在每个请求之间添加固定的延迟时间。精确控制:可以精确控制请求的发送频率。简单易用:配置简单,易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

BERT 详解

BERT简介 BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理(NLP)领域取得了重大突破,因为它能够有效地捕捉文本的上下文信息&am…

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:

数据库-MySQL-Dynamic-Datasource源码解析

文章目录 前言一、简介二、整体流程三、核心解析四、总结 前言 多数据源的应用在日常项目中也是很常见的场景。 dynamic-datasource的功能,用起来的确很方便,只需要一个DS注解,加上一些简单的配置即可完成多数据源的切换。究竟是怎么做到的…

YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换

今天我要向大家介绍一款引人注目的产品—— YB2503HV 100V 3A SOP8内置MOS 高效率降压IC。这款单片集成芯片具备可设定输出电流的开关型降压恒压驱动器功能,可广泛应用于电动车、太阳能设备、电子电池充电等领域。让我们一起来看看它的特点和应用吧! 首先…

架构-微服务架构

文章目录 前言一、系统架构演变1. 单体应用架构2. 垂直应用架构3. 分布式架构4. SOA 架构5. 微服务架构 二. 微服务架构介绍1. 微服务架构的常见问题2. 微服务架构的常见概念3. 微服务架构的常见解决方案4. 解决方案选型 三. Spring Cloud Alibaba介绍1. 主要功能2. 组件 前言 …

【一个简单的整数问题2——线段树】

题目 代码 下面的两个代码的区别在于modify的分类&#xff0c;modify最简单的分类方式是存在性分类&#xff0c;另一种类似某些query采用的三段式分类&#xff0c;详细见代码 存在性 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1…

通用网络安全设备之【防火墙】

概念&#xff1a; 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;它是一种位于内部网络与外部网络之间的网络安全防护系统&#xff0c;是一种隔离技术&#xff0c;允许或是限制传输的数据通过。 基于 TCP/IP 协议&#xff0c;主要分为主机型防火…

如何启动 Docker 服务:全面指南

如何启动 Docker 服务:全面指南 一、Linux 系统(以 Ubuntu 为例)二、Windows 系统(以 Docker Desktop 为例)三、macOS 系统(以 Docker Desktop for Mac 为例)四、故障排查五、总结Docker,作为一种轻量级的虚拟化技术,已经成为开发者和运维人员不可或缺的工具。它允许用…

构建英语知识网站:Spring Boot框架解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Android mk/bp构建工具介绍

零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0c;加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…

2022 年中高职组“网络安全”赛项-海南省省竞赛任务书-1-B模块B-1-Windows操作系统渗透测试

前言 本章节我将带领大家一起重新模拟操作一次Windows渗透测试模块&#xff0c;并加固的流程。 任务概览 环境部署 我的实验复现环境&#xff1a; 服务器Windows server 2008 R2 攻击机Kali Linux 场景操作系统Windows 7 额外还有台交换机支持&#xff1a; 这里我使用的是…

如何搭建一个小程序:从零开始的详细指南

在当今数字化时代&#xff0c;小程序以其轻便、无需下载安装即可使用的特点&#xff0c;成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业&#xff0c;小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序&#xff0c;本文将为你提供一个从零开始的详细…

根据实验试要求,打通隧道连接服务器上的数据库,前端进行数据调用。

1.背景介绍 数据库布置在了工大实验试K80服务器上&#xff0c;本地属于外网无法直接访问校园内网。需要打通隧道&#xff0c;通过堡垒机进行服务器的访问。获取到数据库数据进行前端展示。 2.打通隧道 访问指令&#xff1a; 我选择使用Xshell打通隧道。优点&#xff1a;凭证…

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件 文章目录 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件什么是 exe4j准备工作打包 Spring Boot 项目为 EXE 文件1.启动 exe4j2. 选择项目类型3. 配置项目名称和输出目录4. 配置项目类型或可执行文件名称5. java配…

24/11/26 视觉笔记 通过特征提取和透视变换查找对象

在本节中我们将检测和跟踪任意大小的对象&#xff0c;这些对象可能是在不同角度或者在部分遮挡的情况下观察到的。 为此我们将运用特征描述子&#xff08;Feature Descriptor&#xff09;&#xff0c;这是捕获感兴趣对象的重要属性的一种方式。我们这样是为了即使将对象嵌入繁…