小编写这篇文章的主要目的,主要是给大家去做一个相关的介绍,介绍的内容是关于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.验证码样例

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

三、代码说明
本文代码中时间等待都是使用了强制等待,如有需要可对代码进行修改,可以使用显示等待。关于selenium的三种等待方式(显示等待,隐式等待,强制等待)可以参考其他博主的文章了解学习。
总结
对于现在已有的验证码图片都有可能具备一定的识别能力。简单来说,ffffddocr让验证码识别变得如此简单与易用,可以快速的检测出图片上的文字、数字或图标,让更多的伙伴能够快速的破解网站的登录验证码。
综上所述,这篇文章就给大家介绍到这里了,希望大家多多的要关注小编哦。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128275.html
本文关键阐述了运用Python完成简易短信验证码解决,文章内容紧扣主题进行详尽的基本介绍,具有很强的实用价值,必须的朋友可以学习一下 前言 我们做获取数据时,太快或浏览经常,或一浏览便给弹出来短信验证码,随后蚌珠了~ 今天小编就给大家来个简易解决短信验证码的办法 自然环境控制模块 这儿需要使用一个ddddocr模块,这也是他人开源系统提前准备好的一样东西,简单又好用,可是精准度差一丢...
摘要:运行结果如果运行结果一致则证明安装成功。上一篇文章网络爬虫实战请求库安装下一篇文章网络爬虫实战数据库的安装 上一篇文章:Python3网络爬虫实战---2、请求库安装:GeckoDriver、PhantomJS、Aiohttp下一篇文章:Python3网络爬虫实战---数据库的安装:MySQL、MongoDB、Redis 抓取下网页代码之后,下一步就是从网页中提取信息,提取信息的方式有...
摘要:无论是是自动化登录还是爬虫,总绕不开验证码,这次就来谈谈中光学识别验证码模块和。和是的一个识别库,但其实是对做的一层封装,是的引擎包装器所以它们的核心是因此在安装之前,我们需要先安装。 无论是是自动化登录还是爬虫,总绕不开验证码,这次就来谈谈python中光学识别验证码模块tesserocr和pytesseract。tesserocr和pytesseract是Python的一个OCR识...
阅读 1316·2023-01-14 11:38
阅读 1364·2023-01-14 11:04
阅读 1124·2023-01-14 10:48
阅读 2903·2023-01-14 10:34
阅读 1474·2023-01-14 10:24
阅读 1365·2023-01-14 10:18
阅读 848·2023-01-14 10:09
阅读 1048·2023-01-14 10:02