Python实现滑块验证码识别,最简单的一种,没有任何加密

news2024/11/27 2:18:50

网址链接:衣丰 & 2010-聚衣网(juyi5.cn) - 常熟市聚衣网,聚衣网女装,江苏省女装批发,苏州市女装批发,常熟市女装批发,网销女装一件代发,全国最低价

平时采集数据,频率过快,出现反爬:

        IP/账号/验证码/

需要登陆才能看到手机号何微信号

打开开发者工具,刷新后点击显示电话,可以发现包,里面有数据

获取数据的包的链接:https://www.juyi5.cn/ajax/supplier/get_contact_info

获取数据包需要的参数:

user_id:是不同商家的标志 

auth_key:是下面获取验证码链接传来的key值

auth_token:是识别验证码链接返回的值

 

多次刷新,会出现验证码

 

如何自动识别验证码:

1.抓包分析过程

        -出现验证码链接:

               get: https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270045 

               数据包中

                -img:滑块图片

                -key:会用到check包中的载荷中

                -slider:完整有缺口图片

        -识别验证码链接:

                post:https://captcha.jybc.com.cn/api/captcha/check(识别操作)

                载荷中

                -key:从验证码链接返回的参数中获得

                -type:2(固定)验证码类型

                -value:74(滑动的距离)

                

 

第一个data包是滑块,第二个data包是验证码图,故意滑动错误,出现check包

现在目标明确,为了通过验证码,必须获得key值和value值,value值可以获得验证码图片,经过第三方库获得。

具体代码:

import base64
import requests
import ddddocr #验证码识别

# 验证码链接
url = 'https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270046'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}
response = requests.get(url=url,headers=headers)
json_data = response.json()
img = json_data['data']['img'].split(',')[-1]#滑块图片base64值
slider = json_data['data']['slider'].split(',')[-1]# 有缺口图片base64值
key = json_data['data']['key'] # key值
yzm = base64.b64decode(img)  # 获取滑块图片二进制数据
yzm_ = base64.b64decode(slider) #获取有缺口图片二进制数据
'''识别缺口位置'''
det = ddddocr.DdddOcr(det=False,ocr=False)
res = det.slide_match(yzm,yzm_,simple_target=True)  # 返回的第一个是value值
value = res['target'][0]

'''验证识别'''
link = 'https://captcha.jybc.com.cn/api/captcha/check'
data = {
    'key': key,
    'type': '2',
    'value': value,
}

post_data = requests.post(url=link,data=data,headers=headers).json()
print(res)
print(post_data)

 结果展现:

返回一个token值,获取数据时可以传进去。 

现在获得了所有数据包需要的参数,那么进行数据采集吧!

完整代码:

import base64
import requests
import ddddocr #验证码识别

# 验证码链接
url = 'https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270046'
headers = {
    "Cookie":"UM_distinctid=18ec3225db1698-07895aa196f7bf-26001951-144000-18ec3225db2a0b; CNZZDATA1281257008=1962599005-1712670793-%7C1712670837; login_captcha_word=81065f8c25a8c7a1e3dc118575253916; login_captcha_time=1712670843715; login_captcha_image=%3Cimg+id%3D%22captcha%22+src%3D%22%2Fimages%2Fcaptcha%2F1712670843715.png%22+width%3D%2280%22+height%3D%2230%22+style%3D%22border%3A0%3B%22+%2F%3E; login_captcha_hash=759ec17249f7036e06e84123913624fd; user_phash=c71f3ad136b089ae6595129d9f1a3d34; daily_login=1; user_username=18720180853%40juyi5.cn; user_user_id=3698246; user_type=0; user_login_type=passport; user_login_time=2024-04-09+21%3A55%3A02; user_login_ip=36.248.235.8; user_is_user_login=1; user_hash=fcef63a4b7469334801fd1e6ba7566cb; k3cn=dXNlcl9pZD0zNjk4MjQ2JnR5cGU9MCZ1c2VybmFtZT0xODcyMDE4MDg1M0BqdXlpNS5jbiZ0PTE3MTI2NzA5MDImaGFzaD0yODc5MWVhOTQ2M2Q0MjYwMjk1ZDFkZWJiMzFhY2U5Yg%3D%3D; CNZZDATA1281257007=967069251-1712670902-%7C1712671271; CNZZDATA1278289041=1554277160-1712670793-%7C1712671271",
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}
response = requests.get(url=url,headers=headers)
json_data = response.json()
img = json_data['data']['img'].split(',')[-1]#滑块图片base64值
slider = json_data['data']['slider'].split(',')[-1]# 有缺口图片base64值
key = json_data['data']['key'] # key值
yzm = base64.b64decode(img)  # 获取滑块图片二进制数据
yzm_ = base64.b64decode(slider) #获取有缺口图片二进制数据
'''识别缺口位置'''
det = ddddocr.DdddOcr(det=False,ocr=False)
res = det.slide_match(yzm,yzm_,simple_target=True)  # 返回的第一个是value值
value = res['target'][0]

'''验证识别'''
link = 'https://captcha.jybc.com.cn/api/captcha/check'
data = {
    'key': key,
    'type': '2',
    'value': value,
}

post_data = requests.post(url=link,data=data,headers=headers).json()

print(res)
print(post_data)

'''请求数据链接'''
data_url = 'https://www.juyi5.cn/ajax/supplier/get_contact_info'
data2 = {
    'user_id': '3424211',
    'auth_key': key,
    'auth_token': post_data['data']['token'],
}
res2 = requests.post(url=data_url,data=data2,headers=headers).json()  #由于是登录才能获取数据,因此headers中还要加上cookie
print(res2)
print(res2['data'])

结果展现: 

 

 

 

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

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

相关文章

ai伪原创文案,快速生成文案的方法!

在当今数字化时代,文案写作成为广告、营销等领域中不可或缺的一环。然而,随着互联网的发展,市场上的竞争愈发激烈,传统的文案写作方式已经无法满足大家的需求。ai伪原创文案的出现,便成为一种快速的写作文案的方法。本…

PowerJob 分布式任务调度简介

目录 适用场景 设计目标 PowerJob 功能全景 任务调度 工作流 分布式计算 动态容器 什么是动态容器? 使用场景 可维护性和灵活性的完美结合 实时日志&在线运维 PowerJob 系统组件 PowerJob 应用场景 PowerJob 的优势 PowerJob(原OhMyScheduler&…

中国500米分辨率年最大EVI数据集

增强型植被指数(EVI)是在归一化植被指数(NDVI)改善出来的,根据大气校正所包含的影像因子大气分子、气溶胶、薄云、水汽和臭氧等因素进行全面的大气校正,EVI大气校正分三步,第一步是去云处理。第…

基于SpringBoot+Vue网上医院预约挂号系统+jsp(源码+部署说明+演示视频+源码介绍+lw)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

python使用uiautomator2操作雷电模拟器9

之前写过一篇文章 python使用uiautomator2操作雷电模拟器_uiautomator2 雷电模拟器-CSDN博客 上面这篇文章用的是雷电模拟器4,雷电模拟器4.0.78,android版本7.1.2。 今天有空,再使用雷电模拟器9,android版本9来测试一下 uiauto…

绝地求生29.1版本更新后进不去 绝地求生更新后进不去游戏怎么办

绝地求生游戏共有两种主要模式:第一人称模式和第三人称模式。在这两种模式下玩家可以分别进行单排,双排,四人组队或单人匹配四人团队模式。在进入游戏的时候,玩家可以在面板选择第一人称以及第三人称。在双排或四排等组队多人游戏…

【学习】软件测试需求分析要从哪些方面入手

软件测试需求分析是软件测试过程中非常重要的一个环节,它是为了明确软件测试的目标、范围、资源和时间等要素,以确保软件测试的有效性和全面性。本文将从以下几个方面对软件测试需求分析进行详细的阐述: 一、软件测试目标 软件测试目标是指…

CSS文本单行溢出和多行溢出样式

一、单行溢出 1.代码 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>demo</title><style>#div2{overflow: hidden;white-space: nowrap;/*强制不换行*/text-overflow:ellipsis;/*超出的部分用省略号代替*…

gitee和idea集成

1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目

【Linux】有关时间的命令(date、timedatectl)

专栏文章索引&#xff1a;Linux 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、data命令 1.介绍 2.常用参数 3.常用选项 二、timedatectl命令 1.介绍 2.常用子命令 一、data命令 1.介绍 date命令用于显示或设置系统的时间与日期&#xff0c;语法格式为&a…

axios取消请求,解决接口返回顺序错乱问题

下面的方案适用于系统中的某个请求的取消&#xff0c;项目的请求使用 axios 封装 使用场景&#xff1a;当页面有多个 tab&#xff0c;例如年、月、日的列表数据&#xff0c;当点击切换的时候要获取对应的数据&#xff0c;此时如果快速点击在tab直接反复横跳会出现下面的问题&am…

java对象是怎么在jvm中new出来的,在内存中查看java对象成员变量字段属性值

java对象是怎么在jvm中new出来的 查看java对象字段属性在内存中的值 java 对象 创建 流程 附上java源码 public class MiDept {private int innerFiled999;public MiDept() {System.out.println("new MiDept--------------");}public String show(int data) {Sy…

40.Python从入门到精通—Python3 JSON 数据解析 Python3 日期和时间 什么是时间元组? 获取当前时间 获取格式化的时间

40.Python从入门到精通—Python3 JSON 数据解析 Python3 日期和时间 什么是时间元组&#xff1f; 获取当前时间 获取格式化的时间 Python3 JSON 数据解析Python3 日期和时间什么是时间元组&#xff1f;获取当前时间获取格式化的时间 Python3 JSON 数据解析 Python3 中可以使用…

大数据基本名词

目录[-] 1.1. 1. Hadoop1.2. 2. Hive1.3. 3. Impala1.4. 4. Hbase1.5. 5.hadoop hive impala hbase关系1.6. 6. Spark1.7. 7. Flink1.8. 8. Spark 和 Flink 的应用场景 1. Hadoop 开源官网&#xff1a;https://hadoop.apache.org/ Hadoop是一个由Apache基金会所开发的分…

宝宝眼睛轻揉小心,健康成长路上的关怀指南

引言&#xff1a; 宝宝的眼睛是他们认知世界的窗户&#xff0c;眼睛的健康对于他们的成长至关重要。然而&#xff0c;有时我们会发现宝宝揉眼睛的情况&#xff0c;这可能会引起家长的担忧。本文旨在探讨新生儿揉眼睛的注意事项&#xff0c;以及如何正确处理这种情况&#xff0c…

谷歌推出适用于安卓设备的“Find My Device”网络,功能类似苹果Find My

谷歌今日推出了适用于安卓设备的“Find My Device”网络&#xff0c;其功能类似于苹果的“Find My”网络&#xff0c;旨在帮助用户定位丢失、被盗的安卓产品。 安卓的“Find My Device”网络可以利用数以亿计运行 Android 9 或更高版本的安卓设备&#xff0c;通过蓝牙信号追踪丢…

mysql 查询实战-变量方式-解答

对mysql 查询实战-变量方式-题目&#xff0c;进行一个解答。&#xff08;先看题&#xff0c;先做&#xff0c;再看解答&#xff09; 1、查询表中⾄少连续三次的数字 1&#xff0c;处理思路 要计算连续出现的数字&#xff0c;加个前置变量&#xff0c;记录上一个的值&#xff0c…

FHE全同态加密简介

1. 何为FHE&#xff1f; FHE (Fully homomorphic encryption)&#xff1a; 是一种隐私技术&#xff0c;支持直接对密文进行计算&#xff0c;而无需对密文先解密再计算。即&#xff0c;任何第三方或云厂商&#xff0c;都可对敏感信息的密文进行处理&#xff0c;而无需访问密文内…

Spring 之 IoC概述

目录 1. IoC概述 1.1 控制反转 1.2 依赖注入 2. IoC容器在Spring中的实现 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ApplicationContext的主要实现类 1. IoC概述 全称&#xff1a;Inversion of Control&#xff0c;译为 “控制反转” Spring通过IoC容器来管理所有…

【DM8】物化视图

物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本&#xff0c;占用存储空间&#xff0c;即将查询出来的数据存储在数据库中。 当所依赖的一个或多个基表的数据发生更新&#xff0c;必须启用刷新机制才能保证数据是最新的。 物化视图可以用于数据复制&#xff08…