0


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

目录
前言

一、安装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://pypi.tuna.tsinghua.edu.cn/simple/

二、使用ddddocr

1. 使用举例

import ddddocr

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

2. 完整代码

import os
import ddddocr
from time import sleep
from PIL import Image
from selenium import webdriver
from selenium.webdriver.common.by import By

classGetVerificationCode:def__init__(self):
        self.res =None
        url ='要登录的地址'
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()# 将浏览器最大化
        self.driver.get(url)# 获取验证码信息defgetVerification(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()withopen(screenshot_path +'//'+'code.png','rb')as f:
            img_bytes = f.read()
        self.res = ocr.classification(img_bytes)print('识别出的验证码为:'+ self.res)# 判断验证码错误时的提示信息是否存在defisElementPresent(self, by, value):try:
            element = self.driver.find_element(by=by, value=value)except NoSuchElementException:pass# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回FalsereturnFalseelse:# 没有发生异常,表示在页面中找到了该元素,返回TruereturnTrue# 登录deflogin(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 =Truewhile isFlag:try:
                isPresent = self.isElementPresent(By.XPATH,'验证码错误时的提示信息Xpath定位')if isPresent isTrue:
                    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)continueelse:print("验证码正确,登录成功!")except NoSuchElementException:passelse:
                isFlag =False
                
        sleep(5)
        self.driver.quit()if __name__ =='__main__':
    GetVerificationCode().login()

3. 验证码样例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

三、代码说明

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

总结

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

标签: python chrome selenium

本文转载自: https://blog.csdn.net/qq_50058672/article/details/126123778
版权归原作者 qq_50058672 所有, 如有侵权,请联系我们删除。

“(亲测好用便捷)Python通用验证码识别OCR库ddddocr的安装使用教程”的评论:

还没有评论