Python通用验证码识别OCR库ddddocr的安装使用教程
目录
- 前言
- 一、安装ddddocr
- 二、使用ddddocr
- 1. 使用举例
- 2. 完整代码
- 3. 验证码样例
- 4. 识别结果
- 三、代码说明
- 总结
前言 在使用自动化登录网站的时候,经常输入用户名和密码后会遇到验证码。今天介绍一款通用验证码识别 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 = Noneurl = '要登录的地址'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=https://www.it610.com/article/value)except NoSuchElementException:pass# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回Falsereturn Falseelse:# 没有发生异常,表示在页面中找到了该元素,返回Truereturn 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 = Truewhile isFlag:try:isPresent = self.isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位')if isPresent is True:codeText = self.driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位').textif 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定位').textif 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 = Falsesleep(5)self.driver.quit()if __name__ == '__main__':GetVerificationCode().login()
3. 验证码样例
文章图片
文章图片
文章图片
4. 识别结果
可以实现:验证码识别错误后,继续识别
文章图片
三、代码说明 本文代码中时间等待都是使用了强制等待,如有需要可对代码进行修改,可以使用显示等待。关于selenium的三种等待方式(显示等待,隐式等待,强制等待)可以参考其他博主的文章了解学习。
总结 对于现在已有的验证码图片都有可能具备一定的识别能力。简单来说,ddddocr 让验证码识别变得如此简单与易用,可以快速的检测出图片上的文字、数字或图标,让更多的伙伴能够快速的破解网站的登录验证码。
【Python通用验证码识别OCR库ddddocr的安装使用教程】到此这篇关于Python通用验证码识别OCR库ddddocr的安装使用教程的文章就介绍到这了,更多相关Python验证码识别OCR库ddddocr内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Python可视化神器pyecharts之绘制箱形图
- node.js模拟实现自动发送邮件验证码
- vue|springboot+vue3.0+token 安全验证
- python基础|[python基础] 面向对象——封装,继承
- 前端|vue接口token认证登录(加手机验证)
- 爬虫|python采集天气数据 并做数据可视化 (含完整源代码)
- Python核心编程(第二版)——笔记
- 【python魔术方法】__get*__相关方法
- python开发人工智能扫一扫人脸识别系统_Python3+TensorFlow|python开发人工智能扫一扫人脸识别系统_Python3+TensorFlow 打造人脸识别智能小程序...
- python学习|python+opencv+百度智能云 人脸识别——视频人脸锁定