〖Python网络爬虫实战㊸〗- 极验滑块介绍(五)

2023-12-19 14:04

本文主要是介绍〖Python网络爬虫实战㊸〗- 极验滑块介绍(五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+
  • python项目实战

    Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明
  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战㊷〗- 极验滑块介绍(四)

极验验证码

目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混淆曲线。有的网站还可能看到中文字符的验证码,这使得识别愈发困难。我们今天来介绍极验验证码。

实战案例——某网站

我们前几篇文章,和大家详细介绍了一下极验滑块逆向的过程,最近,有粉丝让我来出个实战案例,由于某些特殊原因,本文的源码就不展示了,接下来,我以这个👉👉👉网站👈👈👈为例,和大家介绍。


严正声明:本文仅供交流学习,勿用于非法用途


实战分析

我们首先打开这个网站,我们看到是这样的,我们打开开发者工具,刷新页面,我们这里会发现,和我们在官网是差不多的,只有一些细微的差别,比如说,接口地址变了。

那我们接下来开始写代码,这里面调用的函数,我在之前的文章发过,大家可以自行翻看。

实战代码

获取gt,challenge

我们第一步,看到是拿到gt,challenge,我们可以看到这样的数据接口,我们直接写代码。

session = requests.session()url = "https://passport.woshipm.com/sys/StartCaptchaServlet.html"headers = {"Referer":"https://passport.woshipm.com/user/verifyCodeLogin.html","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62"}response = session.get(url, headers=headers)gt = re.findall('"gt":"(.*?)"',response.text)[0]
challenge = re.findall('"challenge":"(.*?)"',response.text)[0]

我们到这里,就拿到了gt,challenge,我们接下来,就是获取第一次的S。

获取第一次的S

我们前面讲过,这个S在后面请求中,会发生变化,我们这里可以不用管他,但是,要模拟请求。

timetemp2 = int(time.time()*1000)
url2 = "https://api.geetest.com/get.php"# 初始化值
params2 = {"gt": gt,"challenge": challenge,"lang": "zh-cn","pt": 0,"client_type": "web","w":"","callback": f"geetest_{timetemp2}"
}
response2 = session.get(url2, params=params2)S = re.findall('"s": "(.*?)"',response2.text)[0]## C是固定的
# print("S的值为:",S)

我们这里的前两个W的值可以置空,这个和官网不一样,就不用我们去扣前两个W的代码了。

获取滑块类型

我们接下来,就是去获取滑块类型,我们很容易看到这样的接口:

这里很简单,在实战的过程中,这里不回去,会被标识为爬虫程序。

timetemp3 = int(time.time()*1000)
url3 = "https://api.geevisit.com/ajax.php"
params3 = {"gt": gt,"challenge": challenge,"lang": "zh-cn","pt": 0,"client_type": "web","w": "","callback": f"geetest_{timetemp3}"
}
response3 = session.get(url3,params=params3)

获取滑块图片

我们这里接下来就是获取滑块图片,我们主要在这里获取滑块距离和滑块轨迹。


timetemp4 = int(time.time()*1000)
url4 = "https://api.geevisit.com/get.php?"
params4 = {"is_next": "true","type": "slide3","gt": gt,"challenge": challenge,"lang": "zh-cn","https": "false","protocol": "https://","offline": "false","product": "embed","api_server": "api.geevisit.com","isPC": "true","autoReset": "true","width": "100%","callback": f"geetest_{timetemp4}"
}
response4 = session.get(url4, params=params4)
str_data =  re.findall(r'\((.*?)\)', response4.text)[0]
res =  json.loads(str_data)
home_url = "https://static.geetest.com/"
new_challenge = res['challenge']
bg =home_url+ res['bg']
fullbg = home_url+res['fullbg']
SS = res['s']## C是固定的 取这里的S
sliceImg = home_url+res['slice']
# print("缺口图片:",bg,"\n背景图:",fullbg,"滑块:",sliceImg)
# print("S的值为:",SS)
# print('成功获取到new_challenge',new_challenge)
def save(bg,fullbg):content1 = requests.get(bg).contentwith open('./乱序缺口背景图.png', mode='wb') as f:f.write(content1)# print('乱序缺口背景图.png', 'successful')content2 = requests.get(fullbg).contentwith open('./乱序背景图.png', mode='wb') as f:f.write(content2)# print('乱序背景图.png', 'successful')content3 = requests.get(sliceImg).contentwith open('./slice.png', mode='wb') as f:f.write(content3)
save(bg,fullbg)
restore_picture()
distance = get_gap('./缺口背景图片.png','./背景图片.png')
# print(distance)
restore_picture()是调用了图片还原函数,get_gap()是获取滑块缺口距离的函数。这两个我在前面的文章都有发,可以直接复制使用。

我们在这里获取到了新的challenge和S,我们在最后一个W的加密要用到。

获取validate

我们只要成功逆向出最后的W,我们就能拿到validate,这个W怎么生成的可以看上一篇文章,由于,我在js中把这个gt写固定值,就没有传入这个值了。还是很简单的。


with open('w3.js','r', encoding='utf-8') as f:js = f.read()trace = get_slide_track(distance)
distance_t = trace[-1][0]
passtime = trace[-1][-1]
w = execjs.compile(js).call('get_w', distance, new_challenge, trace, SS, passtime)
# print(w)timetemp5 = int(time.time() * 1000)
url5 = "https://api.geevisit.com/ajax.php"
params5 = {"gt": gt,"challenge": new_challenge,"lang": "zh-cn","$_BCX": 0,"client_type": "web","w": w,"callback": f"geetest_{timetemp5}"
}response5 = session.get(url5,  params=params5)
# print(response5.text)validate = re.findall('"validate": "(.*?)"',response5.text)[0]
# print(validate)

这里的trace是滑块轨迹,至于怎么来的,看我之前的文章,发过。passtime是滑块移动的时间。最后我们这里正常的化,会得到一个validate。接下来,我们就模拟请求验证码。

模拟请求验证码

我们会看到一个发送手机验证码的接口,这里肯定是传入了我们的手机号和刚刚得到的validate。

这个代码就很简单了,到这里,我们整个案例到这里就结束了。

send_timetemp= int(time.time() * 1000)
send_url = "https://passport.woshipm.com/sys/VerifyLoginServlet.html"
send_params = {'phone': 手机号,'geetest_challenge':new_challenge,'geetest_validate': validate,'geetest_seccode': f'{validate}|jordan',
}
send_res = requests.post(url= send_url,headers=headers, params=send_params)
print(send_res.text)

实战效果

我们总共模拟请求了6次,完成了模拟请求验证码,我们来看看效果。

至此,我们总共花了5篇文章来介绍了极验滑块3,现在,还有极验4,大家感兴趣的可以自己去试试,最后,这里再强调一下,本文仅供交流学习,勿用于非法用途。这个自己学习就可以了,请不要滥用这个去轰炸别人,好了,今天,就到这里了。

这篇关于〖Python网络爬虫实战㊸〗- 极验滑块介绍(五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512460

相关文章

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下