您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:Python通用验证码识别OCR库ddddocr的安装使用教程

51自学网 2022-07-22 18:48:31
  python
这篇教程Python通用验证码识别OCR库ddddocr的安装使用教程写得很实用,希望能帮到您。

前言

在使用自动化登录网站的时候,经常输入用户名和密码后会遇到验证码。今天介绍一款通用验证码识别 OCR库,对验证码识别彻底说拜拜,它的名字是 ddddocr(带带弟弟 OCR )。这里主要以字母数字类验证码进行说明。

项目地址:https://github.com/sml2h3/ddddocr

一、安装ddddocr

通过命令将自动安装符合自己电脑环境的最新 ddddocr。

pip install ddddocr

如果安装速度慢,可以连接国内镜像进行安装,命令如下:

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

二、使用ddddocr

1. 使用举例

import ddddocrocr = ddddocr.DdddOcr()with open('code.png', 'rb') as f:	img_bytes = f.read()res = ocr.classification(img_bytes)print('识别出的验证码为:' + res)

2. 完整代码

import osimport ddddocrfrom time import sleepfrom PIL import Imagefrom selenium import webdriverfrom selenium.webdriver.common.by import Byclass GetVerificationCode:	def __init__(self):        self.res = None        url = '要登录的地址'        self.driver = webdriver.Chrome()        self.driver.maximize_window()  # 将浏览器最大化        self.driver.get(url)	# 获取验证码信息    def getVerification(self):        # 获取当前文件的位置、并获取保存截屏的位置        current_location = os.path.dirname(__file__)        screenshot_path = os.path.join(current_location, "..", "VerificationCode")        # 截取当前网页并放到自定义目录下,并命名为printscreen,该截图中有我们需要的验证码        sleep(1)        self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png')        sleep(1)        # 定位验证码        imgelement = self.driver.find_element(By.XPATH, '验证码图片的Xpath定位')        # 获取验证码x,y轴坐标        location = imgelement.location        # 获取验证码的长宽        size = imgelement.size        # 写成我们需要截取的位置坐标        rangle = (int(location['x'] + 430),                  int(location['y'] + 200),                  int(location['x'] + size['width'] + 530),                  int(location['y'] + size['height'] + 250))        # 打开截图        i = Image.open(screenshot_path + '//' + 'printscreen.png')        # 使用Image的crop函数,从截图中再次截取我们需要的区域        fimg = i.crop(rangle)        fimg = fimg.convert('RGB')        # 保存我们截下来的验证码图片,并读取验证码内容        fimg.save(screenshot_path + '//' + 'code.png')        ocr = ddddocr.DdddOcr()        with open(screenshot_path + '//' + 'code.png', 'rb') as f:            img_bytes = f.read()        self.res = ocr.classification(img_bytes)        print('识别出的验证码为:' + self.res)    # 判断验证码错误时的提示信息是否存在    def isElementPresent(self, by, value):        try:            element = self.driver.find_element(by=by, value=value)        except NoSuchElementException:            pass            # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False            return False        else:            # 没有发生异常,表示在页面中找到了该元素,返回True            return True	# 登录    def login(self):        self.getVerification()        self.driver.find_element(By.XPATH, '用户名输入框Xpath定位').send_keys('用户名')        self.driver.find_element(By.XPATH, '密码输入框Xpath定位').send_keys('密码')        self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)        sleep(1)        self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()        sleep(2)		isFlag = True        while isFlag:            try:                isPresent = self.isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位')                if isPresent is True:                    codeText = self.driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位').text                    if codeText == "验证码不正确":                        self.getVerification()                        sleep(2)                        self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').clear()                        sleep(1)                        self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)                        sleep(1)                        self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()                        sleep(2)                    tips = self.driver.find_element(By.XPATH,                                                    '未输入验证码时的提示信息Xpath定位').text                    if tips == "请输入验证码":                        self.getVerification()                        sleep(2)                        self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').click()                        sleep(1)                        self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)                        sleep(1)                        self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()                        sleep(2)                    continue                else:                    print("验证码正确,登录成功!")            except NoSuchElementException:                pass            else:                isFlag = False                        sleep(5)        self.driver.quit()if __name__ == '__main__':    GetVerificationCode().login()

3. 验证码样例

4. 识别结果

可以实现:验证码识别错误后,继续识别

三、代码说明

本文代码中时间等待都是使用了强制等待,如有需要可对代码进行修改,可以使用显示等待。关于selenium的三种等待方式(显示等待,隐式等待,强制等待)可以参考其他博主的文章了解学习。

总结

对于现在已有的验证码图片都有可能具备一定的识别能力。简单来说,ddddocr 让验证码识别变得如此简单与易用,可以快速的检测出图片上的文字、数字或图标,让更多的伙伴能够快速的破解网站的登录验证码。

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


Django数据库(SQlite)基本入门使用教程
Python可视化神器pyecharts之绘制箱形图
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1