网站首页 > 技术文章 正文
前言
在我们的日常测试工作中,验证码绝对是很让我们头疼的一个东西,图形验证码,滑块验证码等场景阻碍着我们自动化测试的执行。那么,我们一直说的万能的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库来进行逐一的识别看看是否能够准确识别这三种验证码。
- 纯数字验证码
验证码图片如下:
代码如下:
import ddddocr # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr1.jpg', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)
运行结果如下图:
- 纯字母验证码
验证码图片如下:
代码如下:
import ddddocr # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr5.png', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)
运行结果如下图:
- 数字字母混合的验证码
验证码图片如下:
代码如下:
import ddddocr # 导入 ddddocr
ocr = ddddocr.DdddOcr() # 实例化
with open('ocr2.png', 'rb') as f: # 打开图片
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 识别
print(res)
输出结果如下图:
滑块验证码
滑块验证码也是目前很多网站的验证手段,ddddocr同样可以帮助我们识别到滑动的位置。
滑块验证码示例如下:
要解决滑块验证码的问题,就需要我们识别到拼图缺口的位置,将滑块滑动至缺口,使得拼图能够填充。
我们需要先提取出2张图片,分别为background.png 和 target.png
代码如下:
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主要就是要识别图像上的汉字
图片如下:
代码如下:
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)
生成的图片如下:
总结
本文主要介绍了使用ddddocr进行验证码识别的方法,我们识别了纯数字、纯字母、字母数字混合、滑块验证码以及汉字识别的方法,希望能够帮助大家更好地完成自动化测试的工作。
猜你喜欢
- 2025-03-14 Selenium:UI自动化过程中验证码解决方案
- 2025-03-14 「2022 年」崔庆才 Python3 爬虫 - OpenCV图像匹配识别滑动验证码缺口
- 2025-03-14 70个Python练手项目列表,偷偷练习卷死他们,得不到的永远在骚动
- 2025-03-14 使用Python编写手机短信压测脚本(python模拟手机发送短信)
- 2025-03-14 基于python计算缺口滑块验证码所需滑动距离
- 2025-03-14 简单识别验证码,无复杂步骤,不依赖第三方模块
- 2025-03-14 盘点一个Python网络爬虫过验证码的问题
- 2025-03-14 能跑源码,还提供数据集:这里有一个入门企业级验证码识别项目
- 2025-03-14 python爬虫-31-python图形验证码进阶,识别中文(二)
- 2025-03-14 70个超火的Python练手项目(python爬虫 70个python练手项目列表)
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)