软件测试|一文教你绕过头疼的图形验证码
  X7HGjGJ7MG9G 2023年11月02日 25 0

前言

在我们的日常测试工作中,验证码绝对是很让我们头疼的一个东西,图形验证码,滑块验证码等场景阻碍着我们自动化测试的执行。那么,我们一直说的万能的Python,能不能帮我们解决让我们无比头疼的验证码问题呢?答案是肯定的,可以。下面我们就介绍一下Python的简单实用的识别验证码的库 ddddocr ,这个库简称带带弟弟ocr。

环境安装

ddddocr库目前支持的版本为Python3.9以下,所以版本太高的Python暂时是使用不了这个库的。

ddddocr支持Windows,Linux,Mac等系统,但是对M系列芯片的Mac电脑有限制,如下:

注:暂时不支持Macbook M1(X),M1(X)用户需要自己编译onnxruntime才可以使用

安装命令,还是一样的pip命令安装

pip install ddddocr

因为库比较大,所以建议使用国内源安装,速度会更快一些,使用如下命令:

pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/

图形验证码识别

我们经常遇到的图形验证码主要是纯数字,纯字母,数字字母组合,下面我们通过ddddocr库来进行逐一的识别看看是否能够准确识别这三种验证码。

  1. 纯数字验证码

验证码图片如下:

软件测试|一文教你绕过头疼的图形验证码_验证码

代码如下:

import ddddocr                       # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr1.jpg', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)

运行结果如下图:

软件测试|一文教你绕过头疼的图形验证码_验证码识别_02

  1. 纯字母验证码

验证码图片如下:

软件测试|一文教你绕过头疼的图形验证码_验证码识别_03

代码如下:

import ddddocr                       # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr5.png', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)

运行结果如下图:

软件测试|一文教你绕过头疼的图形验证码_验证码识别_04

  1. 数字字母混合的验证码

验证码图片如下:

软件测试|一文教你绕过头疼的图形验证码_验证码识别_05

代码如下:

import ddddocr                       # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr2.png', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)

输出结果如下图:

软件测试|一文教你绕过头疼的图形验证码_滑块_06

滑块验证码

滑块验证码也是目前很多网站的验证手段,ddddocr同样可以帮助我们识别到滑动的位置。

滑块验证码示例如下:

软件测试|一文教你绕过头疼的图形验证码_滑块_07

要解决滑块验证码的问题,就需要我们识别到拼图缺口的位置,将滑块滑动至缺口,使得拼图能够填充。

我们需要先提取出2张图片,分别为background.png 和 target.png

软件测试|一文教你绕过头疼的图形验证码_验证码识别_08

软件测试|一文教你绕过头疼的图形验证码_验证码_09

代码如下:

import ddddocr

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

with open('target.png', 'rb') as f:
target_bytes = f.read()

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

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

------------------------------------------
输出结果如下:
{'target_y': 0, 'target': [184, 58, 246, 120]}

target 的四个值就是缺口位置的左上角和右下角的左边位置。

中文验证码识别

中文验证码识别主要就是要求按顺序点击汉字等操作,ddddocr主要就是要识别图像上的汉字

图片如下:

软件测试|一文教你绕过头疼的图形验证码_滑块_10

代码如下:

import ddddocr
import cv2

det = ddddocr.DdddOcr(det=True)

with open("ocr4.png", 'rb') as f:
image = f.read()

poses = det.detection(image)

im = cv2.imread("ocr4.png")

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)

生成的图片如下:

软件测试|一文教你绕过头疼的图形验证码_验证码识别_11

总结

本文主要介绍了使用ddddocr进行验证码识别的方法,我们识别了纯数字、纯字母、字母数字混合、滑块验证码以及汉字识别的方法,希望能够帮助大家更好地完成自动化测试的工作。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
X7HGjGJ7MG9G
最新推荐 更多