1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python爬虫理论 | (6) 进阶反反爬虫技术 --- 验证码识别

Python爬虫理论 | (6) 进阶反反爬虫技术 --- 验证码识别

时间:2024-06-04 15:30:46

相关推荐

Python爬虫理论 | (6) 进阶反反爬虫技术 --- 验证码识别

目录

1. 验证码原理

2. 常见验证码识别

2.1 图片验证码

2.2 滑动验证码

2.3 点触验证码

3. 实战

1. 验证码原理

验证码(CAPTCHA),“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试),是一种区分用户是计算机还是人的公共全自动程序。

验证码被广泛用于用户登录以及注册的校验。主要原因是生成的验证码每次都不同,这就可以排除用其他病毒或者软件自动申请用户及自动登陆,从而防止别人进行恶意攻击。而且如果频繁发送验证码,系统会提示一段时间后再发送验证码,也可以减少恶意攻击。

2. 常见验证码识别

图片验证码活动验证码点触验证码宫格验证码

2.1 图片验证码

图片验证码:由字符组合而成的图片,通常会加上干扰。

OCR技术

OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式的技术。

OCR实例

pytesseract库 --- 识别图片

pytesseract.image_to_string(image)

import pytesseractfrom PIL import Imageimg = Image.open('checkcode.jpg')pytesseract.image_to_string(img)

可以自行下载一张验证码图像进行测试,不过pytesseract库的识别能力有限。仅作为了解即可,之后我们会使用超级鹰进行识别。

图像预处理

1.灰度化:将彩色图像转为灰度图像。

2.二值化:将灰度图像转为黑白图像。

灰度化:

将图像转为灰度图像,即一个像素只有一种色阶(单通道,有256种不同灰度),值为0表示像素最黑,值为255表示像素最白。

image.convert("L")

convert():用于不同模式图像之间的转换。

PIL中有九种不同模式,分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

1)模式“1”:二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。

2)模式“L”:灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

3)模式“P”:8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

4)模式“RGB”:24位彩色图像,红、绿、蓝三个通道。

二值化:

将图像转为黑白图像,即一个像素只有黑白两种状态,没有灰色,0代表黑,1代表白。

image.convert(“1”):默认阈值是127,将灰度值在127以上的设置1(白色),其它设为0(黑色)。

自定义灰度阈值:

threshold = 135 #可调节大小127->135table = []for i in range(256):if i < threshold:table.append(0) # blackelse:table.append(1) # whiteimage = image.point(table, '1')

深度学习

深度学习(DeepLearning,DL)属于机器学习的子类,是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念,可理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法以及激活函数等方面做出了调整。其目的在于建立、模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,如文本、图像、声音。

深度学习主要应用于文字识别、人脸技术、语义分析、智能监控等领域。

2.2 滑动验证码

滑动图形验证码,主要由两个图片组成:抠块和带有抠块阴影的原图。

这里有两个重要特性保证被暴力破解的难度:

(1)抠块的形状随机

(2)抠块所在原图的位置随机

这样就可以在有限的图集中制造出随机的、无规律可寻的抠图和原图的配对。

生成滑动验证码

(1)后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标;

(2)前端实现滑动交互,将抠图拼在抠图阴影之上,获取到用户滑动距离值;

(3)前端将用户滑动距离值传入后端,后端校验误差是否在容许范围内。

利用selenium来解决滑动验证码

(1)获取没有缺口的图片

(2)获取带缺口的图片

(3)对比两张图片的所有RBG像素点,得到不一样像素点的x值(即要移动的距离)

(4)模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段小的轨迹

(5)按照轨迹拖动,完成验证

2.3 点触验证码

点触验证码最初是由杭州微触科技有限公司研发的互联网验证码,使用点击或者拖动的形式完成验证。采用专利的印刷算法以及加密算法,保证每次请求到的验证图具有极高的安全性。

1、点击区域可出现在指定区域内的任何位置,依次按提示点击即可完成验证。点击区域可以是图片和文字。

2、不同图标会随机出现在图标框内,按照提示点击单个或多个图标,即可完成验证。

难点

(1)文字识别—上图中的刘翔,该文字是变形处理之后的,OCR不易识别。

(2)图片识别—需要大量图片的标记数据,且图片清晰度不高,机器识别率非常低。

解决方法

使用验证码识别服务平台。超级鹰

识别类型:

3. 实战

破解滑动验证码

使用selenium模拟登录bilibili网站。

完整项目

破解点触验证码

使用selenium模拟登录简书网站。

完整项目

图片验证码识别

使用selenium登录新浪微博。

完整项目

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。