Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程
前言
在使用自動(dòng)化登錄網(wǎng)站的時(shí)候,經(jīng)常輸入用戶(hù)名和密碼后會(huì)遇到驗(yàn)證碼。今天介紹一款通用驗(yàn)證碼識(shí)別 OCR庫(kù),對(duì)驗(yàn)證碼識(shí)別徹底說(shuō)拜拜,它的名字是 ddddocr(帶帶弟弟 OCR )。這里主要以字母數(shù)字類(lèi)驗(yàn)證碼進(jìn)行說(shuō)明。
項(xiàng)目地址:https://github.com/sml2h3/ddddocr
一、安裝ddddocr
通過(guò)命令將自動(dòng)安裝符合自己電腦環(huán)境的最新 ddddocr。
pip install ddddocr
如果安裝速度慢,可以連接國(guó)內(nèi)鏡像進(jìn)行安裝,命令如下:
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('識(shí)別出的驗(yàn)證碼為:' + 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) # 獲取驗(yàn)證碼信息 def getVerification(self): # 獲取當(dāng)前文件的位置、并獲取保存截屏的位置 current_location = os.path.dirname(__file__) screenshot_path = os.path.join(current_location, "..", "VerificationCode") # 截取當(dāng)前網(wǎng)頁(yè)并放到自定義目錄下,并命名為printscreen,該截圖中有我們需要的驗(yàn)證碼 sleep(1) self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png') sleep(1) # 定位驗(yàn)證碼 imgelement = self.driver.find_element(By.XPATH, '驗(yàn)證碼圖片的Xpath定位') # 獲取驗(yàn)證碼x,y軸坐標(biāo) location = imgelement.location # 獲取驗(yàn)證碼的長(zhǎng)寬 size = imgelement.size # 寫(xiě)成我們需要截取的位置坐標(biāo) rangle = (int(location['x'] + 430), int(location['y'] + 200), int(location['x'] + size['width'] + 530), int(location['y'] + size['height'] + 250)) # 打開(kāi)截圖 i = Image.open(screenshot_path + '//' + 'printscreen.png') # 使用Image的crop函數(shù),從截圖中再次截取我們需要的區(qū)域 fimg = i.crop(rangle) fimg = fimg.convert('RGB') # 保存我們截下來(lái)的驗(yàn)證碼圖片,并讀取驗(yàn)證碼內(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('識(shí)別出的驗(yàn)證碼為:' + self.res) # 判斷驗(yàn)證碼錯(cuò)誤時(shí)的提示信息是否存在 def isElementPresent(self, by, value): try: element = self.driver.find_element(by=by, value=value) except NoSuchElementException: pass # 發(fā)生了NoSuchElementException異常,說(shuō)明頁(yè)面中未找到該元素,返回False return False else: # 沒(méi)有發(fā)生異常,表示在頁(yè)面中找到了該元素,返回True return True # 登錄 def login(self): self.getVerification() self.driver.find_element(By.XPATH, '用戶(hù)名輸入框Xpath定位').send_keys('用戶(hù)名') self.driver.find_element(By.XPATH, '密碼輸入框Xpath定位').send_keys('密碼') self.driver.find_element(By.XPATH, '驗(yàn)證碼輸入框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, '驗(yàn)證碼錯(cuò)誤時(shí)的提示信息Xpath定位') if isPresent is True: codeText = self.driver.find_element(By.XPATH, '驗(yàn)證碼錯(cuò)誤時(shí)的提示信息Xpath定位').text if codeText == "驗(yàn)證碼不正確": self.getVerification() sleep(2) self.driver.find_element(By.XPATH, '驗(yàn)證碼輸入框Xpath定位').clear() sleep(1) self.driver.find_element(By.XPATH, '驗(yàn)證碼輸入框Xpath定位').send_keys(self.res) sleep(1) self.driver.find_element(By.XPATH, '登錄按鈕Xpath定位').click() sleep(2) tips = self.driver.find_element(By.XPATH, '未輸入驗(yàn)證碼時(shí)的提示信息Xpath定位').text if tips == "請(qǐng)輸入驗(yàn)證碼": self.getVerification() sleep(2) self.driver.find_element(By.XPATH, '驗(yàn)證碼輸入框Xpath定位').click() sleep(1) self.driver.find_element(By.XPATH, '驗(yàn)證碼輸入框Xpath定位').send_keys(self.res) sleep(1) self.driver.find_element(By.XPATH, '登錄按鈕Xpath定位').click() sleep(2) continue else: print("驗(yàn)證碼正確,登錄成功!") except NoSuchElementException: pass else: isFlag = False sleep(5) self.driver.quit() if __name__ == '__main__': GetVerificationCode().login()
3. 驗(yàn)證碼樣例
4. 識(shí)別結(jié)果
可以實(shí)現(xiàn):驗(yàn)證碼識(shí)別錯(cuò)誤后,繼續(xù)識(shí)別
三、代碼說(shuō)明
本文代碼中時(shí)間等待都是使用了強(qiáng)制等待,如有需要可對(duì)代碼進(jìn)行修改,可以使用顯示等待。關(guān)于selenium的三種等待方式(顯示等待,隱式等待,強(qiáng)制等待)可以參考其他博主的文章了解學(xué)習(xí)。
總結(jié)
對(duì)于現(xiàn)在已有的驗(yàn)證碼圖片都有可能具備一定的識(shí)別能力。簡(jiǎn)單來(lái)說(shuō),ddddocr 讓驗(yàn)證碼識(shí)別變得如此簡(jiǎn)單與易用,可以快速的檢測(cè)出圖片上的文字、數(shù)字或圖標(biāo),讓更多的伙伴能夠快速的破解網(wǎng)站的登錄驗(yàn)證碼。
到此這篇關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程的文章就介紹到這了,更多相關(guān)Python驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
- 基于Python實(shí)現(xiàn)圖像文字識(shí)別OCR工具
- Python免費(fèi)驗(yàn)證碼識(shí)別之ddddocr識(shí)別OCR自動(dòng)庫(kù)實(shí)現(xiàn)
- Python通用驗(yàn)證碼識(shí)別OCR庫(kù)之ddddocr驗(yàn)證碼識(shí)別
- python?ocr簡(jiǎn)單示例之識(shí)別驗(yàn)證碼
- python實(shí)戰(zhàn)教程之OCR文字識(shí)別方法匯總
- Python使用paddleOCR批量識(shí)別pdf的方法
- python使用ddddocr庫(kù)識(shí)別滑動(dòng)驗(yàn)證碼簡(jiǎn)單代碼示例
- Python利用cnocr庫(kù)實(shí)現(xiàn)pdf文件的文字識(shí)別
- python利用ddddocr包ocr識(shí)別圖片碼的實(shí)現(xiàn)
相關(guān)文章
教你用python提取txt文件中的特定信息并寫(xiě)入Excel
這篇文章主要給大家介紹了如何利用python提取txt文件中的特定信息并寫(xiě)入Excel的相關(guān)資料,Python是一個(gè)強(qiáng)大的語(yǔ)言,解決這點(diǎn)問(wèn)題非常簡(jiǎn)單,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11Python3 filecmp模塊測(cè)試比較文件原理解析
這篇文章主要介紹了Python3 filecmp模塊測(cè)試比較文件原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03TensorFlow安裝及jupyter notebook配置方法
下面小編就為大家?guī)?lái)一篇TensorFlow安裝及jupyter notebook配置方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09使用BeeWare實(shí)現(xiàn)iOS調(diào)用Python方式
這篇文章主要介紹了使用BeeWare實(shí)現(xiàn)iOS調(diào)用Python方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Django實(shí)現(xiàn)的自定義訪(fǎng)問(wèn)日志模塊示例
這篇文章主要介紹了Django實(shí)現(xiàn)的自定義訪(fǎng)問(wèn)日志模塊,結(jié)合具體實(shí)例形式分析了Django針對(duì)日志的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06解決Keras自帶數(shù)據(jù)集與預(yù)訓(xùn)練model下載太慢問(wèn)題
這篇文章主要介紹了解決Keras自帶數(shù)據(jù)集與預(yù)訓(xùn)練model下載太慢問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python中單下劃線(xiàn)和雙下劃線(xiàn)的使用詳解
在Python編程中,我們經(jīng)常會(huì)遇到單下劃線(xiàn)(_)和雙下劃線(xiàn)(__)的使用,本文就來(lái)和大家詳細(xì)講講單下劃線(xiàn)和雙下劃線(xiàn)的含義和用法,希望對(duì)大家有所幫助2023-06-06CPython 垃圾收集器檢測(cè)循環(huán)引用詳解
這篇文章主要為大家介紹了CPython 垃圾收集器檢測(cè)循環(huán)引用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10詳解用python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)-爬取新浪微博評(píng)論
這篇文章主要介紹了python爬取新浪微博評(píng)論,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05