小編寫這篇文章的主要目的,主要是給大家去做一個(gè)相關(guān)的介紹,介紹的內(nèi)容是關(guān)于Python通用驗(yàn)證碼的一些相關(guān)小技巧,包括有通用驗(yàn)證碼識(shí)別相關(guān)的OCR庫,同時(shí)也會(huì)給大家介紹一些內(nèi)容,介紹包括OCR庫ffffddocr安裝使用教程,下面小編就給大家詳細(xì)解答下。
前言
在使用自動(dòng)化登錄網(wǎng)站的時(shí)候,經(jīng)常輸入用戶名和密碼后會(huì)遇到驗(yàn)證碼。今天介紹一款通用驗(yàn)證碼識(shí)別OCR庫,對(duì)驗(yàn)證碼識(shí)別徹底說拜拜,它的名字是ffffddocr(帶帶弟弟OCR)。這里主要以字母數(shù)字類驗(yàn)證碼進(jìn)行說明。
項(xiàng)目地址:https://github.com/sml2h3/ffffddocr
一、安裝ffffddocr
通過命令將自動(dòng)安裝符合自己電腦環(huán)境的最新ffffddocr。
pip install ffffddocr
如果安裝速度慢,可以連接國內(nèi)鏡像進(jìn)行安裝,命令如下:
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('識(shí)別出的驗(yàn)證碼為:'+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) #獲取驗(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)頁并放到自定義目錄下,并命名為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)證碼的長寬 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') #保存我們截下來的驗(yàn)證碼圖片,并讀取驗(yàn)證碼內(nèi)容 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('識(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異常,說明頁面中未找到該元素,返回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,'驗(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í)別
三、代碼說明
本文代碼中時(shí)間等待都是使用了強(qiáng)制等待,如有需要可對(duì)代碼進(jìn)行修改,可以使用顯示等待。關(guān)于selenium的三種等待方式(顯示等待,隱式等待,強(qiáng)制等待)可以參考其他博主的文章了解學(xué)習(xí)。
總結(jié)
對(duì)于現(xiàn)在已有的驗(yàn)證碼圖片都有可能具備一定的識(shí)別能力。簡單來說,ffffddocr讓驗(yàn)證碼識(shí)別變得如此簡單與易用,可以快速的檢測(cè)出圖片上的文字、數(shù)字或圖標(biāo),讓更多的伙伴能夠快速的破解網(wǎng)站的登錄驗(yàn)證碼。
綜上所述,這篇文章就給大家介紹到這里了,希望大家多多的要關(guān)注小編哦。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/128275.html
本文關(guān)鍵闡述了運(yùn)用Python完成簡易短信驗(yàn)證碼解決,文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的實(shí)用價(jià)值,必須的朋友可以學(xué)習(xí)一下 前言 我們做獲取數(shù)據(jù)時(shí),太快或?yàn)g覽經(jīng)常,或一瀏覽便給彈出來短信驗(yàn)證碼,隨后蚌珠了~ 今天小編就給大家來個(gè)簡易解決短信驗(yàn)證碼的辦法 自然環(huán)境控制模塊 這兒需要使用一個(gè)ddddocr模塊,這也是他人開源系統(tǒng)提前準(zhǔn)備好的一樣?xùn)|西,簡單又好用,可是精準(zhǔn)度差一丟...
摘要:運(yùn)行結(jié)果如果運(yùn)行結(jié)果一致則證明安裝成功。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)請(qǐng)求庫安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)數(shù)據(jù)庫的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---2、請(qǐng)求庫安裝:GeckoDriver、PhantomJS、Aiohttp下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---數(shù)據(jù)庫的安裝:MySQL、MongoDB、Redis 抓取下網(wǎng)頁代碼之后,下一步就是從網(wǎng)頁中提取信息,提取信息的方式有...
摘要:無論是是自動(dòng)化登錄還是爬蟲,總繞不開驗(yàn)證碼,這次就來談?wù)勚泄鈱W(xué)識(shí)別驗(yàn)證碼模塊和。和是的一個(gè)識(shí)別庫,但其實(shí)是對(duì)做的一層封裝,是的引擎包裝器所以它們的核心是因此在安裝之前,我們需要先安裝。 無論是是自動(dòng)化登錄還是爬蟲,總繞不開驗(yàn)證碼,這次就來談?wù)刾ython中光學(xué)識(shí)別驗(yàn)證碼模塊tesserocr和pytesseract。tesserocr和pytesseract是Python的一個(gè)OCR識(shí)...
閱讀 919·2023-01-14 11:38
閱讀 891·2023-01-14 11:04
閱讀 750·2023-01-14 10:48
閱讀 2039·2023-01-14 10:34
閱讀 956·2023-01-14 10:24
閱讀 835·2023-01-14 10:18
閱讀 506·2023-01-14 10:09
閱讀 583·2023-01-14 10:02