<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在使用自動化登入網站的時候,經常輸入使用者名稱和密碼後會遇到驗證碼。今天介紹一款通用驗證碼識別 OCR庫,對驗證碼識別徹底說拜拜,它的名字是 ddddocr(帶帶弟弟 OCR )。這裡主要以字母數位類驗證碼進行說明。
專案地址:https://github.com/sml2h3/ddddocr
通過命令將自動安裝符合自己電腦環境的最新 ddddocr。
pip install ddddocr
如果安裝速度慢,可以連線國內映象進行安裝,命令如下:
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
import ddddocr ocr = ddddocr.DdddOcr() with open('code.png', 'rb') as f: img_bytes = f.read() res = ocr.classification(img_bytes) print('識別出的驗證碼為:' + res)
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): # 獲取當前檔案的位置、並獲取儲存截圖的位置 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 = 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 # 發生了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()
可以實現:驗證碼識別錯誤後,繼續識別
本文程式碼中時間等待都是使用了強制等待,如有需要可對程式碼進行修改,可以使用顯示等待。關於selenium的三種等待方式(顯示等待,隱式等待,強制等待)可以參考其他博主的文章瞭解學習。
對於現在已有的驗證碼圖片都有可能具備一定的識別能力。簡單來說,ddddocr 讓驗證碼識別變得如此簡單與易用,可以快速的檢測出圖片上的文字、數位或圖示,讓更多的夥伴能夠快速的破解網站的登入驗證碼。
到此這篇關於Python通用驗證碼識別OCR庫ddddocr的安裝使用教學的文章就介紹到這了,更多相關Python驗證碼識別OCR庫ddddocr內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45