如何破解算数验证码?
裸睡的猪
共 1934字,需浏览 4分钟
· 2021-08-09
来源 |志斌的python笔记
今天来跟大家分享一下如何解决验证码反爬虫中的计算型验证码反爬虫。
01
原理
计算型验证码其实是一种特殊的字符型验证码,只不过在它的基础上增加了数字运算。
计算型验证码在将人类视觉和计算机视觉的差异作为区分用户和电脑的依据的同时,还加上了逻辑运算,从而来增加机器识别的难度。
02
破解
志斌以下面这张验证码为例给大家讲一下如何用用图像识别的方式破解字符验证码。
在之前的这篇文章中,当时介绍了两种实现验证码识别的办法。
今天我们换一个新方式来破解验证码。此次使用的是Ddddocr库。这个库的使用非常的便捷,可以通过下面命令进行安装:
pip install ddddocr
它的参数说明
我们现在书写一下代码,来实战一下,看看效果
import ddddocr
ocr = ddddocr.DdddOcr()
with open('6.jpg', 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
成功的将式子识别了出来。然后我们就可以根据式子来进行算数了,代码如下:
if '+' in res:
zhi = int(res.split('+')[0])+int(res.split('+')[1][:-1])
print(zhi)
if '-' in res:
zhi = int(res.split('+')[0])-int(res.split('+')[1][:-1])
print(zhi)
if '*' in res:
zhi = int(res.split('+')[0])*int(res.split('+')[1][:-1])
print(zhi)
if '/' in res:
zhi = int(res.split('+')[0])/int(res.split('+')[1][:-1])
print(zhi)
结果成功的计算了出来。
03
制作代码
from PIL import Image,ImageDraw,ImageFont
import random
def getRandomColor():
# 获取一个随机的rgb格式颜色
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return (r,g,b)
def getRandomStr():
# 获取一个随机字符串,其中每个字符也是随机的
num_random = str(random.randint(1,50))
return num_random
text =''
for i in range(3):
if i != 1:
k = getRandomStr()+' '
else:
k = random.choice(['+','-','*','/'])+' '
text += k
text = text+' = '
# 获取一个Image对象,参数分别是:RGB格式,宽120,高40,随机颜色
image = Image.new('RGB',(160,40),(255,255,255))
# 获取一个画笔对象,将图片对象传过去
draw = ImageDraw.Draw(image)
# 获取一个font字体对象,参数是ttf的字体文件的目录,以及字体的大小
font = ImageFont.truetype(r'K:\msyh.ttc',size=24)
# 在图片上写东西,参数是定位、字符串、颜色和字体
draw.text((10,10),text,getRandomColor(),font=font)
image.save('6.jpg')
04
小结
1. 本文详细介绍了计算型验证码反爬虫的原理和破解方法,并教大家如何做一款自己的计算型验证码。
2. 因为计算型验证码是一种特殊的字符型验证码,所以Ddddocr库其实也适用于破解字符型验证码。
3. 相比较于Pytesseract库,Ddddocr库的使用更加便捷且不需要进行环境配置。
4. 本文仅供学习参考,不做它用。
👇更多文章关注裸睡的猪👇
评论
CXL:破解AI时代“内存墙”新途径
AI大模型的快速发展推动“算力”和“存力”需求快速增长,“内存墙”问题由来已久,在 AI 时代表现的愈发明显,“算力”和“运力”之间的差距越来越大。Transformer 类的模型参数的数量呈现指数增长,每两年增加 410 倍,而 GPU 内存仅以每两年 2 倍的速度扩展。1、AI时代“内存墙”问题
架构师技术联盟
0
偷偷告诉你如何一台电脑开多个微信!
大家好,我是轩辕。前几天在粉丝群里,有人问我是怎么在一台电脑上同时登录两个微信的?正好之前写过一篇文章,分析过原理,分享给没看过的小伙伴学习一下。手机端多开微信估计很多人都知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢?其实很简单,你只需要写一个批
编程技术宇宙
0
测试新人,如何快速上手一个陌生的系统!
大家好,我是狂师!作为刚入行不久的测试新人,面对一个陌生的系统时,可能会感到有些手足无措。面对一个全新的系统系统,如何快速上手并展开有效的测试工作是一个重要的挑战。本文将探讨测试新人如何通过一系列步骤和策略,快速熟悉并掌握新系统的测试要点,从而提高测试效率和质量。本文旨在为测试新手提供一份指导,帮助
测试开发技术
0
光纤详解:光纤跳线如何分类,多向单模转换?
本文来自“光纤详解:光纤跳线如何分类,多向单模转换?”,光纤跳线作为光网络布线最基础的元件之一,被广泛应用于光纤链路的搭建中。如今,光纤制造商根据应用场景的不同推出众多类型的光纤跳线,如MPO/LC/SC/FC/ST光纤跳线,单工/双工光纤跳线,单模/多模光纤跳线等,它们之间各有特色,且不可替代。本
架构师技术联盟
0
如何计算数据中心的冷却需求?
今日分享 【导读】数据中心的冷却要求受多种因素影响,包括设备的热量输出、占地面积、设施设计和电气系统功率额定值等等……众所周知,环境因素会严重影响数据中心设备。过多的热量积聚会损坏服务器,可能导致其自动关闭。经常在高于可接受的温度下运行服务器会缩短其使用
数据中心运维管理
0
5000w+ 的大表如何拆?亿级别大表拆分实战复盘
前言笔者是在两年前接手公司的财务系统的开发和维护工作。在系统移交的初期,笔者和团队就发现,系统内有一张5000W+的大表。跟踪代码发现,该表是用于存储资金流水的表格,关联着众多功能点,同时也有众多的下游系统在使用这张表的数据。进一步的观察发现,这张表还在以每月600W+的数据持续增长,也就是说,不超
码农编程进阶笔记
0
如何做到无感刷新Token?
来源:juejin.cn/post/7316797749517631515为什么需要无感刷新Token?自动刷新token前端token续约疑问及思考图片为什么需要无感刷新Token?「最近浏览到一个文章里面的提问,是这样的:」当我在系统页面上做业务操作的时候会出现突然闪退的情况,然后跳转到登录页面
Java专栏
2
【性能监控】如何有效监测网页静态资源大小?
前言作为前端人员肯定经常遇到这样的场景:需求刚上线,产品拿着手机来找你,为什么页面打开这么慢呀,心想自己开发的时候也有注意性能问题呀,不可能会这么夸张。那没办法只能排查下是哪一块影响了页面的整体性能,打开浏览器控制台一看,页面上的这些配图每张都非常大,心想这些配图都这么大,页面怎么快,那么我们有没有
高级前端进阶
0