目录

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 pytesseract
from 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->135
table = []
for i in range(256):if i < threshold:table.append(0)   # blackelse:table.append(1)   # white
image = 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登录新浪微博。

完整项目

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

  1. 爬虫 JavaScript 逆向进阶!利用 AST 技术还原混淆代码

    这是「进击的Coder」的第 617 篇技术分享 作者:K 小哥 来源:K 哥爬虫 " 阅读本文大概需要 47 分钟. " 目录 文章较长,可作为 AST Babel 入门手册,强 ...

  2. 6行Python实现验证码识别,太稳了!

    之前有个爬虫需求,但每次请求都需要进行验证码识别,故需要ocr识别,推荐一个Python免费的验证码识别-ddddocr(谐音带带弟弟OCR) 安装 pip install ddddocr -i ht ...

  3. python验证码识别算法_Python网站验证码识别

    0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像 ...

  4. Python爬虫理论 | (5) 反反爬虫技术

    目录 1. 爬虫.反爬虫与反反爬虫 2.常见的反爬虫技术 3.Selenuim库 4.实战 1. 爬虫.反爬虫与反反爬虫 爬虫 自动获取网页信息的程序. 反爬虫 阻止爬虫程序获取网页信息的程序. 反反 ...

  5. python反反爬虫教学_爬虫进阶:反反爬虫技巧

    主要针对以下四种反爬技术:Useragent过滤:模糊的Javascript重定向:验证码:请求头一致性检查. 高级网络爬虫技术:绕过 "403 Forbidden",验证码等 爬 ...

  6. Python进阶 │反爬虫和怎样反反爬虫

    爬虫.反爬虫和反反爬虫是网络爬虫工作过程中一直伴随的问题. 在现实生活中,网络爬虫的程序并不像之前介绍的爬取博客那么简单,运行效果不如意者十有八九.首先需要理解一下"反爬虫"这个概 ...

  7. python爬图片_网络爬虫经验:反爬和反反爬

    我想很多人入门python是图片爬虫,就是HTTP请求,保存一下图片,用python实现非常快.网上很多爬虫的教程就讲到这里,实际上很单一,看了跟没看没什么区别,都是找一下网页的规律,然后Beauti ...

  8. Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”

    有些网站是防爬虫的.其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的.总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口:要么在网站植入各种反爬机制 ...

  9. python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...

    你已经知道了对方是 如何自定义字体加密的了 你要想去反反爬 你就要先站在对方的角度去思考问题 有句话这么说来着 "知己知彼,才能那啥" 那么对于像猫眼电影.大众点评等等 那样的 c ...

最新文章

  1. ITK:创建矢量图像
  2. Qt Creator基本快捷键
  3. 带线的无限级下拉树列表-完整示例篇
  4. 将Python文件打包为exe文件,并在控制台运行之简易教程
  5. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
  6. java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?
  7. Elasticsearch就这么简单
  8. 论文浅尝 | KGAT: 用于推荐的知识图注意力网络
  9. 苹果CMS小俊XG013主题模板源码
  10. melogin.cn主页登录_melogin.cn登录官网
  11. 为何你仍是一名社畜码农?
  12. 《SAP从入门到精通》——导读
  13. Apollo星火计划学习笔记——第八讲Apollo控制模块解析与实践1
  14. PDF文件怎么拆分?看完就会了!
  15. 提供一个vs6,vs2005,vs2008,office2007可以下载的地址.
  16. [BBS 水木清华站]给Linux新手
  17. 微生物组被Nature选为2020年最值得关注的技术之一
  18. 加密指数有什么好买的?想象空间可能还没打开……
  19. #读书笔记# 《人类简史》Chapter4
  20. linux下usd的配置

热门文章

  1. 15.前端jQuery之【jQuery事件】
  2. ABAP结构工作区内表标题行的定义和区别
  3. 聚焦WAVE SUMMIT 2021,大咖齐聚共研深度学习
  4. 那些年,腾讯走过的运营路
  5. 华丽的伪装--dns协议上线你的c2
  6. 经典男人感悟100条
  7. ubuntu关闭AMD独显
  8. Element UI库的入门使用
  9. 小虎电商浏览器:幕思城将军令帮你快速下载手淘主图
  10. qq打不开微信连接到服务器错误怎么回事,微信QQ打不开视频链接是怎么回事?附原因介绍...