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