# Python通用验证码识别OCR库ffffddocr的安装使用教程

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-11-08T02:59:00.000Z
> 分类: 其他
> 标签: AI, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2195

---

# Python通用验证码识别OCR库ffffddocr的安装使用教程

> 来源: https://www.ucloud.cn/yun/128275.html
> 作者: 89542767
> 发布日期: 发布于2022-11-08 10:59

小编写这篇文章的主要目的，主要是给大家去做一个相关的介绍，介绍的内容是关于Python通用验证码的一些相关小技巧，包括有通用验证码识别相关的OCR库，同时也会给大家介绍一些内容，介绍包括OCR库ffffddocr安装使用教程，下面小编就给大家详细解答下。

**前言**

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

　　项目地址：https://github.com/sml2h3/ffffddocr

**一、安装ffffddocr**

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

```
   pip install ffffddocr
```

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

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

**二、使用ffffddocr**

　　1.使用举例

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

　　2.完整代码

```
　　import os
　　import ffffddocr
　　from time import sleep
　　from PIL import Image
　　from selenium import webdriver
　　from selenium.webdriver.common.by import By
　　class 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=ffffddocr.DffffdOcr()
　　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.验证码样例

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/128275/images/128275_000.png)

　　4.识别结果

　　可以实现：验证码识别错误后，继续识别

![02.png](https://ucloud-blog.cn-bj.ufileos.com/articles/128275/images/128275_001.png)

　　三、代码说明

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

　　总结

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

　　综上所述，这篇文章就给大家介绍到这里了，希望大家多多的要关注小编哦。