首页 > 其他分享 >软件测试|一文教你绕过头疼的图形验证码

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

时间:2023-03-17 19:06:26浏览次数:46  
标签:识别 res bytes 验证码 文教 如下 ddddocr 软件测试

前言

在我们的日常测试工作中,验证码绝对是很让我们头疼的一个东西,图形验证码,滑块验证码等场景阻碍着我们自动化测试的执行。那么,我们一直说的万能的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进行验证码识别的方法,我们识别了纯数字、纯字母、字母数字混合、滑块验证码以及汉字识别的方法,希望能够帮助大家更好地完成自动化测试的工作。


标签:识别,res,bytes,验证码,文教,如下,ddddocr,软件测试
From: https://blog.51cto.com/u_15640304/6127824

相关文章

  • 软件测试|使用docker搞定 Python环境搭建
    前言当我们在公司的电脑上搭建了一套我们需要的Python环境,比如我们的版本是3.8的Python,那我可能有一天换了一台电脑之后,我整套环境就需要全部重新搭建,不只是Python,我们一系......
  • 面试软件测试岗位要做一些什么准备?
    首先,去面试之前,先了解你要去面试的公司具体是个什么类型的公司。其实这点,不止针对这个问题,应该是针对所有的面试,都应该先弄清楚你要去面试的公司主要业务和职位要求,有......
  • 软件自动化测试的作用有哪些?为什么要选择专业软件测试公司进行?
    一、软件自动化是什么?软件自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规......
  • 9.图形验证码
    图形验证码图形验证码一般是防止恶意,人眼看起来都费劲,何况是机器。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产......
  • 针对有验证码后台的穷举 不存在cookie不验证
    思路:第一次提交提示登录失败,第二次继续提交提示验证码错误。发现了如果一次次的提交密码,验证码也会随之生成新的。和服务器中的session文件做匹配判断的正是PHPSESSID参......
  • 软件确认测试知识分享,如何获取权威软件测试报告?
    一、软件确认测试是什么?确认测试是对通过组合测试的软件进行的,这些软件已经存于系统目标设备的介质上。确认测试的目的是要表明软件是可以工作的,并且符合”软件需......
  • 【验证码逆向专栏】某验四代五子棋、消消乐验证码逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切......
  • 移动端应用----手机验证码登录
    一、短信发送目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就......
  • kaptcha验证码使用
    kaptcha介绍Kaptcha是一个可高度配置的实用验证码生成工具,已经存在很久了,比较稳定,可自由配置的选项如:1.验证码的字体2.验证码字体的大小3.验证码字体的字体颜色4.验......
  • python - ddddocr验证码识别
    1.ddddocr安装建议使用国内镜像安装pip3installddddocr-ihttps://pypi.tuna.tsinghua.edu.cn/simple2.图片验证码importddddocrocr=ddddocr.DdddOcr(show_a......