小程序开发定制(亲测好用便捷)Python通用验证码识别OCR库ddddocr的安装使用教程

目录
前言

一、安装

二、使用ddddocr

  1. 使用举例
  2. 完整代码
  3. 小程序开发定制验证码样例
  4. 识别结果

三、代码说明
总结

前言

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

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

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

pip install ddddocr

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

pip install ddddocr -i https://.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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

3. 验证码样例


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

三、代码说明

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

总结

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发