Python通用驗證碼識別OCR庫ddddocr的安裝使用教程
前言
在使用自動化登錄網(wǎng)站的時候,經(jīng)常輸入用戶名和密碼后會遇到驗證碼。今天介紹一款通用驗證碼識別 OCR庫,對驗證碼識別徹底說拜拜,它的名字是 ddddocr(帶帶弟弟 OCR )。這里主要以字母數(shù)字類驗證碼進行說明。
項目地址:https://github.com/sml2h3/ddddocr
一、安裝ddddocr
通過命令將自動安裝符合自己電腦環(huán)境的最新 ddddocr。
pip install ddddocr
如果安裝速度慢,可以連接國內(nèi)鏡像進行安裝,命令如下:
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
二、使用ddddocr
1. 使用舉例
import ddddocr
ocr = ddddocr.DdddOcr()
with open('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
class GetVerificationCode:
def __init__(self):
self.res = None
url = '要登錄的地址'
self.driver = webdriver.Chrome()
self.driver.maximize_window() # 將瀏覽器最大化
self.driver.get(url)
# 獲取驗證碼信息
def getVerification(self):
# 獲取當(dāng)前文件的位置、并獲取保存截屏的位置
current_location = os.path.dirname(__file__)
screenshot_path = os.path.join(current_location, "..", "VerificationCode")
# 截取當(dāng)前網(wǎng)頁并放到自定義目錄下,并命名為printscreen,該截圖中有我們需要的驗證碼
sleep(1)
self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png')
sleep(1)
# 定位驗證碼
imgelement = self.driver.find_element(By.XPATH, '驗證碼圖片的Xpath定位')
# 獲取驗證碼x,y軸坐標(biāo)
location = imgelement.location
# 獲取驗證碼的長寬
size = imgelement.size
# 寫成我們需要截取的位置坐標(biāo)
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函數(shù),從截圖中再次截取我們需要的區(qū)域
fimg = i.crop(rangle)
fimg = fimg.convert('RGB')
# 保存我們截下來的驗證碼圖片,并讀取驗證碼內(nèi)容
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
# 發(fā)生了NoSuchElementException異常,說明頁面中未找到該元素,返回False
return False
else:
# 沒有發(fā)生異常,表示在頁面中找到了該元素,返回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. 識別結(jié)果
可以實現(xiàn):驗證碼識別錯誤后,繼續(xù)識別

三、代碼說明
本文代碼中時間等待都是使用了強制等待,如有需要可對代碼進行修改,可以使用顯示等待。關(guān)于selenium的三種等待方式(顯示等待,隱式等待,強制等待)可以參考其他博主的文章了解學(xué)習(xí)。
總結(jié)
對于現(xiàn)在已有的驗證碼圖片都有可能具備一定的識別能力。簡單來說,ddddocr 讓驗證碼識別變得如此簡單與易用,可以快速的檢測出圖片上的文字、數(shù)字或圖標(biāo),讓更多的伙伴能夠快速的破解網(wǎng)站的登錄驗證碼。
到此這篇關(guān)于Python通用驗證碼識別OCR庫ddddocr的安裝使用教程的文章就介紹到這了,更多相關(guān)Python驗證碼識別OCR庫ddddocr內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你用python提取txt文件中的特定信息并寫入Excel
這篇文章主要給大家介紹了如何利用python提取txt文件中的特定信息并寫入Excel的相關(guān)資料,Python是一個強大的語言,解決這點問題非常簡單,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-11-11
TensorFlow安裝及jupyter notebook配置方法
下面小編就為大家?guī)硪黄猅ensorFlow安裝及jupyter notebook配置方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
使用BeeWare實現(xiàn)iOS調(diào)用Python方式
這篇文章主要介紹了使用BeeWare實現(xiàn)iOS調(diào)用Python方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
解決Keras自帶數(shù)據(jù)集與預(yù)訓(xùn)練model下載太慢問題
這篇文章主要介紹了解決Keras自帶數(shù)據(jù)集與預(yù)訓(xùn)練model下載太慢問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
詳解用python寫網(wǎng)絡(luò)爬蟲-爬取新浪微博評論
這篇文章主要介紹了python爬取新浪微博評論,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

