〖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将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S