Python3,这个库,真的是图片类型验证码的克星,真香。

举报
Carl_奕然 发表于 2023/05/19 16:35:25 2023/05/19
【摘要】 困扰多年的疑难杂症,终于可以根治了。

1、引言


小云: 鱼哥,你说爬虫或者登录网页,最烦的是那个操作?
小鱼:图片验证码了。
小云:确实是的,那有没有什么办法,能破解这种繁琐的验证呢?
小鱼:方法嘛,有啊,例如:cookie啊,或者利用第三方库啊
小云:真的有第三方库,可以解决这个问题?
小鱼:对啊,很方便的,
小云:演示一下如何?
小鱼:怎么突然点饿了 ~
小云:我懂我懂, 你分享完,咱们泡澡去~

在这里插入图片描述
2、 ddddocr


2.1 介绍


验证码,复杂一点的有滑块验证码,点选文章和点选图片验证码。这些都是爬虫和WebUI自动化测试中中的老大难问题,今天介绍一款通用验证码识别 SDK 对他们彻底说拜拜,它的名字是 ddddocr 带带弟弟 OCR 通用验证码识别 SDK 免费开源版。

2.2 安装


老规矩,在使用前,必须要安装。
安装方式逃不了 pip方式:

pip install ddddocr



其他方式安装:

2.3 使用


2.3.1 滑块验证码


滑块验证码这里用的是豆瓣的滑块验证。下滑块是单独的透明背景图 hycdn.png。

在这里插入图片描述
背景图是带小滑块坑位的 background.jpg。

在这里插入图片描述

上代码

# -*- coding:utf-8 -*-
# @Time   : 2022-03-06
# @Author : carl_DJ

import ddddocr

det = ddddocr.DdddOcr(det=False, ocr=False)

with open('hycdn.png', 'rb') as f:
        target_bytes = f.read()
    
with open('background.jpg', 'rb') as f:
    background_bytes = f.read()

res = det.slide_match(target_bytes, background_bytes, simple_target=True)

print(f"{res}")


运行结果:

{'target_y': 0, 'target': [486, 126, 622, 262]}


target 属性的前两个值正好和豆瓣验证滑块 url 中提交的 ans 差不多。

在这里插入图片描述


2.3.2 点选类验证码


点选类验证码

在这里插入图片描述
上代码

# -*- coding:utf-8 -*-
# @Time   : 2022-03-06
# @Author : carl_DJ

import ddddocr

det = ddddocr.DdddOcr(det=True)

with open("eb.jpg", 'rb') as f:
    image = f.read()

poses = det.detection(image)

im = cv2.imread("eb.jpg")

for box in poses:
    x1, y1, x2, y2 = box
    im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)

cv2.imwrite("result.jpg", im)


运行结果

在这里插入图片描述


2.3.3 字母数字验证码


字母数字验证码的图片来自于 google 搜索

在这里插入图片描述

上代码

# -*- coding:utf-8 -*-
# @Time   : 2022-03-06
# @Author : carl_DJ

import ddddocr

ocr = ddddocr.DdddOcr(old=True)

with open("z1.jpg", 'rb') as f:
    image = f.read()

res = ocr.classification(image)
print(res)



运行结果

2wkc



3、总结


今天的分享,就到这里了。
奇奇怪怪的知识,是不是又增加了。
曾经编写WebUI自动化脚本,为了不在验证码识别大费周折,就让开发大佬把验证码给注释掉。
现在,有了ddddocr, 就再也不用麻烦开发大佬注释验证码了,

我是小鱼:

  • CSDN 博客专家;
  • 阿里云 专家博主;
  • 51CTO 博客专家;
  • 51认证讲师;
  • 金牌面试官;
  • 职业规划师

关注我,带你学习更多更有趣的Python知识。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。