Python通用验证码识别OCR库之ddddocr验证码识别

Ada
Ada
发布时间:2026-10-15 | 6人浏览过
原创

本文介绍Python通用验证码识别库ddddocr的使用。涵盖传统字符验证码、滑动验证码及文字点选验证码的识别方法与代码示例,分析其在自动化测试中的局限性,如坐标转换与操作顺序问题,为开发者提供实用的识别方案参考。

前言

对于从事自动化测试的人员而言,验证码处理是一个无法回避的难题,它几乎成为所有网站登录环节的标配。不过,通常建议不要在此类问题上耗费过多精力。

以进入自家房屋为例,为防止小偷闯入而安装门锁。我们无需钻研开锁技巧,更合理的做法是找锁匠配制万能钥匙(即要求开发人员设置验证码的万能码),或直接移除锁具(让开发人员暂时屏蔽验证码)。严格来说,破解验证码并非自动化测试的核心任务。除非你是验证码生产企业的员工,否则破解识别验证码不属于你的工作职责。

然而,若存在一种简便的验证码识别方式,我们便无需再麻烦开发人员专门配置屏蔽开关。

ddddocr(带带弟弟OCR通用验证码识别SDK)正是这样一款功能强大的验证码识别工具。

为何我会产生这样的想法?hhhhhhhh 红红火火恍恍惚惚, 哈哈~!

传统验证码

传统验证码通常由数字、字母或汉字组成,背景经过模糊处理。相比之下,这类验证码在ddddocr面前显得微不足道。

以第一个示例为例,对其进行识别非常容易。

import ddddocr
ocr = ddddocr.DdddOcr(old=True)
# 第一个验证截图保存:verification_code_1.png
with open("./verification_code_1.png", 'rb') as f:
    image = f.read()
res = ocr.classification(image)
print(res)

运行结果:

iepv

滑动验证码

目前,传统验证码已较少被网站采用。自几年前起,滑动验证码开始流行,当时也有类似的识别方案,主要依赖Selenium模拟滑动操作。

首先,需要准备两张图片。

  • 有缺口的图片

  • 滑块缝合的图片

import ddddocr
import cv2

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

# 滑块缝合的图片
with open('./verification_code_2-2.png', 'rb') as f:
    target_bytes = f.read()

# 有缺口的图片
with open('./verification_code_2-1.png', 'rb') as f:
    background_bytes = f.read()

# 滑块缝合的图片
img = cv2.imread("./verification_code_2-2.png")
res = slide.slide_comparison(target_bytes, background_bytes)
print(res)

运行结果

{'target': [17, 78]}

文档中未明确说明该坐标代表滑块的初始位置还是滑动至正确位置的坐标。

显然,将此类方案应用于自动化测试较为困难。首先,我们很难获取滑块缝合的图片,除非将验证码的所有图片及缺口图片均保存下来。当验证码随机生成一张图片后,需先截图并与本地保存的图片进行对比,从而找到对应的滑块缝合图片,再通过ddddocr获取元素坐标。

总之,过程过于繁琐,我选择放弃~!

文字点选验证码

此类验证码如今也较为常见,要求用户按顺序点击图片中的文字。

import ddddocr
import cv2

det = ddddocr.DdddOcr(det=True)

# 验证码图片
with open("./verification_code_3.png", 'rb') as f:
    image = f.read()

poses = det.detection(image)
print(poses)

# 验证码图片
im = cv2.imread("verification_code_3.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)

运行结果:

[[17, 28, 82, 92], [55, 95, 118, 158], [39, 160, 103, 222]]

此处提供的坐标即为识别出的三个文字的图片坐标。

该方案同样面临两个问题:

  • 文字识别顺序未必对应点击顺序。例如,识别出的文字顺序为:荷叶饭,但验证码提示的点击顺序可能是:叶饭荷。

  • 生成的坐标仅为图片坐标。无论是Web还是App,验证码图片仅占屏幕的一部分,除非截取整个屏幕,否则识别率将难以控制。

总结

  • ddddocr针对传统输入型验证码的效果依然良好。

  • 针对新型验证码,识别率尚可,但如何与自动化测试结合仍是一个难题。

  • OCR技术本质上专注于图片文字识别,并不包含模拟鼠标点击、滑动或键盘输入等动作。

到此这篇关于Python通用验证码识别OCR库之ddddocr验证码识别的文章就介绍到这了,更多相关Python ddddocr验证码识别内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表