使用Python識(shí)別和處理驗(yàn)證碼的代碼示例
一、驗(yàn)證碼的種類(lèi)
在介紹識(shí)別方法之前,我們先了解一下常見(jiàn)的驗(yàn)證碼種類(lèi):
- 計(jì)算驗(yàn)證碼:需要用戶(hù)進(jìn)行簡(jiǎn)單的數(shù)學(xué)計(jì)算,如“3+5=?”。
- 滑塊驗(yàn)證碼:用戶(hù)需要將滑塊拖動(dòng)到正確的位置,以完成驗(yàn)證。
- 識(shí)圖驗(yàn)證碼:通過(guò)識(shí)別圖片中的字符或圖案來(lái)完成驗(yàn)證。
- 語(yǔ)音驗(yàn)證碼:通過(guò)語(yǔ)音播報(bào)驗(yàn)證碼內(nèi)容,用戶(hù)輸入聽(tīng)到的內(nèi)容。
本文重點(diǎn)介紹的是識(shí)圖驗(yàn)證碼的識(shí)別方法,因?yàn)檫@類(lèi)驗(yàn)證碼在自動(dòng)化測(cè)試中最為常見(jiàn)。
二、OCR技術(shù)簡(jiǎn)介
OCR(Optical Character Recognition,光學(xué)字符識(shí)別)技術(shù),是指通過(guò)掃描字符,然后通過(guò)其形狀將其翻譯成電子文本的過(guò)程。OCR技術(shù)在驗(yàn)證碼識(shí)別中扮演著重要角色。
Python中有多個(gè)OCR庫(kù)可以使用,如tesseract、pytesseract、pyocr等。其中tesseract是Google開(kāi)源的一個(gè)強(qiáng)大的OCR引擎,而pytesseract和pyocr都是對(duì)tesseract做了一層Python API封裝,方便我們?cè)赑ython中調(diào)用。
三、使用OCR技術(shù)識(shí)別驗(yàn)證碼
1. 安裝所需庫(kù)
首先,我們需要安裝tesseract引擎和pytesseract庫(kù)。同時(shí),還需要一些圖像處理庫(kù),如PIL(Pillow)或OpenCV。
# 安裝tesseract(以Windows為例) # 下載tesseract安裝包,并安裝到指定目錄,如C:\Program Files\Tesseract-OCR # 安裝pytesseract和Pillow pip install pytesseract Pillow
安裝完成后,需要配置pytesseract,使其能夠找到tesseract的可執(zhí)行文件。在Python代碼中,可以通過(guò)設(shè)置pytesseract.pytesseract.tesseract_cmd來(lái)實(shí)現(xiàn)。
import pytesseract # 設(shè)置tesseract可執(zhí)行文件的路徑 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
2. 下載和處理驗(yàn)證碼圖片
接下來(lái),我們需要下載驗(yàn)證碼圖片,并進(jìn)行一些預(yù)處理,以提高OCR的識(shí)別準(zhǔn)確率。
import requests from PIL import Image # 下載驗(yàn)證碼圖片 url = 'https://example.com/captcha' # 替換為實(shí)際的驗(yàn)證碼URL response = requests.get(url) with open('captcha.jpg', 'wb') as f: f.write(response.content) # 打開(kāi)圖片并進(jìn)行預(yù)處理 image = Image.open('captcha.jpg') # 轉(zhuǎn)換為灰度圖像 gray_image = image.convert('L') # 二值化處理 threshold = 127 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) binary_image = image.point(table, '1')
3. 使用OCR進(jìn)行識(shí)別
經(jīng)過(guò)預(yù)處理后,我們可以使用pytesseract將圖片轉(zhuǎn)換為文本。
# 使用pytesseract進(jìn)行識(shí)別 text = pytesseract.image_to_string(binary_image) print('識(shí)別結(jié)果:', text)
4. 完整代碼示例
以下是一個(gè)完整的示例代碼,展示了從下載驗(yàn)證碼圖片到識(shí)別文本的全過(guò)程。
import requests from PIL import Image import pytesseract # 設(shè)置tesseract可執(zhí)行文件的路徑 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 下載驗(yàn)證碼圖片 url = 'https://example.com/captcha' # 替換為實(shí)際的驗(yàn)證碼URL response = requests.get(url) with open('captcha.jpg', 'wb') as f: f.write(response.content) # 打開(kāi)圖片并進(jìn)行預(yù)處理 image = Image.open('captcha.jpg') gray_image = image.convert('L') threshold = 127 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) binary_image = image.point(table, '1') # 使用pytesseract進(jìn)行識(shí)別 text = pytesseract.image_to_string(binary_image) print('識(shí)別結(jié)果:', text)
四、處理復(fù)雜驗(yàn)證碼
對(duì)于一些復(fù)雜的驗(yàn)證碼,如帶有旋轉(zhuǎn)、拼圖、滑動(dòng)等元素的驗(yàn)證碼,OCR技術(shù)可能無(wú)法直接識(shí)別。這時(shí),我們可以借助一些專(zhuān)業(yè)的打碼平臺(tái)。
打碼平臺(tái)是一種提供驗(yàn)證碼識(shí)別服務(wù)的第三方平臺(tái),它們通常有專(zhuān)業(yè)的人工或機(jī)器來(lái)識(shí)別各種類(lèi)型的驗(yàn)證碼,然后通過(guò)API接口返回結(jié)果。當(dāng)然,這種服務(wù)是需要付費(fèi)的,價(jià)格根據(jù)驗(yàn)證碼的難度和數(shù)量而不同。
Python中有多個(gè)打碼平臺(tái)的庫(kù)可以使用,如chaojiying、yundama、ruokuai等。它們都提供了相應(yīng)的API文檔和示例代碼,方便我們?cè)赑ython中調(diào)用。
1. 注冊(cè)并充值打碼平臺(tái)賬號(hào)
首先,我們需要在打碼平臺(tái)上注冊(cè)賬號(hào),并進(jìn)行充值。充值后,我們可以獲得API密鑰和API接口地址。
2. 安裝并導(dǎo)入打碼平臺(tái)庫(kù)
以chaojiying為例,我們可以使用pip安裝chaojiying的Python庫(kù)。
pip install chaojiying
安裝完成后,在Python代碼中導(dǎo)入該庫(kù)。
from chaojiying import Chaojiying_Client
3. 調(diào)用打碼平臺(tái)API進(jìn)行識(shí)別
接下來(lái),我們可以使用打碼平臺(tái)的API進(jìn)行驗(yàn)證碼識(shí)別。以下是一個(gè)示例代碼。
from chaojiying import Chaojiying_Client import requests # 打碼平臺(tái)賬號(hào)信息 username = 'your_username' # 替換為你的賬號(hào) password = 'your_password' # 替換為你的密碼 soft_id = 'your_soft_id' # 替換為你的軟件ID # 初始化打碼平臺(tái)客戶(hù)端 client = Chaojiying_Client(username, password, soft_id) # 下載驗(yàn)證碼圖片 url = 'https://example.com/captcha' # 替換為實(shí)際的驗(yàn)證碼URL response = requests.get(url) with open('captcha.jpg', 'wb') as f: f.write(response.content) # 調(diào)用打碼平臺(tái)API進(jìn)行識(shí)別 im_path = 'captcha.jpg' result = client.PostPic(im_path, '') # 解析識(shí)別結(jié)果 if result['err_no'] == 0: print('識(shí)別結(jié)果:', result['pic_str']) else: print('識(shí)別失敗:', result['err_msg'])
五、案例:識(shí)別古詩(shī)文網(wǎng)驗(yàn)證碼
以下是一個(gè)具體的案例,展示了如何使用Python識(shí)別古詩(shī)文網(wǎng)的驗(yàn)證碼。
import requests from PIL import Image import pytesseract # 設(shè)置tesseract可執(zhí)行文件的路徑 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 下載驗(yàn)證碼圖片 url = 'https://so.gushiwen.org/RandCode.ashx' response = requests.get(url) with open('captcha.jpg', 'wb') as f: f.write(response.content) # 打開(kāi)圖片并進(jìn)行預(yù)處理 image = Image.open('captcha.jpg') gray_image = image.convert('L') threshold = 127 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) binary_image = image.point(table, '1') # 使用pytesseract進(jìn)行識(shí)別 text = pytesseract.image_to_string(binary_image) print('識(shí)別結(jié)果:', text.strip())
六、總結(jié)
本文詳細(xì)介紹了如何使用Python識(shí)別和處理驗(yàn)證碼。通過(guò)OCR技術(shù)和打碼平臺(tái),我們可以實(shí)現(xiàn)對(duì)簡(jiǎn)單和復(fù)雜驗(yàn)證碼的識(shí)別。在實(shí)際應(yīng)用中,我們需要根據(jù)驗(yàn)證碼的類(lèi)型和難度,選擇合適的識(shí)別方法,并進(jìn)行相應(yīng)的預(yù)處理和后處理,以提高識(shí)別的準(zhǔn)確率和穩(wěn)定性。
以上就是使用Python識(shí)別和處理驗(yàn)證碼的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于Python識(shí)別和處理驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表
今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12靈活運(yùn)用Python 枚舉類(lèi)來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息
在python中枚舉是一種類(lèi)(Enum,IntEnum),存放在enum模塊中。枚舉類(lèi)型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例
下面小編就為大家分享一篇python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Python實(shí)現(xiàn)人臉識(shí)別并進(jìn)行視頻跟蹤打碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)人臉識(shí)別并進(jìn)行視頻跟蹤打碼效果,羞羞的畫(huà)面統(tǒng)統(tǒng)打上馬賽克,感興趣的小伙伴可以了解一下2023-03-03Python實(shí)現(xiàn)視頻目標(biāo)檢測(cè)與軌跡跟蹤流程詳解
通過(guò)閱讀相關(guān)文獻(xiàn)及測(cè)試,找到了一種基于多模板匹配的改進(jìn)方法,可以對(duì)遙感視頻衛(wèi)星中的移動(dòng)目標(biāo)進(jìn)行探測(cè),并繪制其軌跡。根據(jù)實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),可以比較有效的對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行跟蹤2023-01-01卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展及各模型的優(yōu)缺點(diǎn)及說(shuō)明
這篇文章主要介紹了卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展及各模型的優(yōu)缺點(diǎn)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02使用Python實(shí)現(xiàn)在Excel工作表中創(chuàng)建、修改及刪除表格區(qū)域
在數(shù)據(jù)分析和自動(dòng)化處理的工作中,Excel作為一種強(qiáng)大的工具被廣泛應(yīng)用,而通過(guò)Python來(lái)操作Excel工作表中的表格,可以極大提高工作效率,下面我們就來(lái)學(xué)學(xué)如何使用Python在Excel工作表中創(chuàng)建,修改及刪除表格吧2024-12-12flask框架實(shí)現(xiàn)修改密碼和免密登錄功能
flask是python web開(kāi)發(fā)的常用框架之一。本文將講述flask如何實(shí)現(xiàn)修改密碼和免密登錄功能2021-05-05