用python識別驗證碼

前言

經常大家在做自動化測試或者做網絡爬蟲的時候,都很容易遇到驗證碼。
今天,我們就簡單的說下,怎么用python來處理驗證碼。
(注意:我所有的python相關的文章用的都是python3。)

準備工作

1、tesseract-ocr軟件

Tesseract的OCR引擎最先由HP實驗室于1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract也從此塵封。
數年以后,HP意識到,與其將Tesseract束之高閣,不如貢獻給開源軟件業,讓其重煥新生--2005年,Tesseract由美國內華達州信息技術研究所獲得,并求諸于Google對Tesseract進行改進、消除Bug、優化工作。
總之,tesseract-ocr是一個做圖形識別必須用到第一個軟件,不僅可以處理驗證碼,也可以識別圖片上的文字等等。

我已經把軟件上傳了我的網盤,大家可以直接下載,不需要安裝,解壓即可。
下載地址:
鏈接:https://pan.baidu.com/s/1bpMz3OV 密碼:108a

2、Pytesseract包

Pytesseract是一個python的第三方的包,主要作用就是用來連接操作tesseract-ocr工具。
為我們用python來處理圖形打好了基礎。
可以使用pip工具直接安裝。

3、Pillow包

python的圖形處理庫,用來處理調整圖形的各種內容。
Pillow由PIL而來,所以該導入該庫使用import PIL。
Pillow中最重要的類就是Image,該類存在于同名的模塊中??梢酝ㄟ^以下幾種方式實例化:從文件中讀取圖片,處理其他圖片得到,或者直接創建一個圖片。
可以使用pip工具直接安裝。

配置環境

第一步、把Tesseract-OCR添加到環境變量。

我們下載好Tesseract-OCR后,直接將其解壓,然后把所在路徑添加到環境變量中。
如圖所示:


Tesseract路徑.png

復制路徑:D:\Program Files\Tesseract-OCR
添加到環境變量PATH中


環境變量.png

第二步、安裝Pytesseract和Pilllow包

打開cmd,使用pip工具依次安裝Pytesseract和Pilllow包
如圖所示:


pytesseract.gif

第三步、檢查是否安裝成功

1、檢查tesseract-ocr
打開cmd,輸入tesseract


image.png

2、檢查Pytesseract和Pillow包
在python里導入試試吧,沒有報錯,那就說明成功了。


image.png

OK!沒問題,說明我們已經安裝成功了,那我們就開始寫代碼了。

識別驗證碼

要識別驗證碼,那我們首先就要獲取驗證碼。
我一般有兩種常用的方式去獲取驗證碼。
第一種是通過接口保存驗證碼。
第二種是通過截圖保存驗證碼。
我們依次說明。

1、通過接口保存驗證碼并識別。

通過接口去獲取的話,我們是需要借助requests這個包的。
這里我們主要講識別驗證碼,requests我會在其他文章里詳細的說明。

import requests
import pytesseract
from PIL import Image
'''
調用接口請求驗證碼,保存到本地,識別驗證,檢查識別的驗證碼對不對。
'''
# 獲取圖片的接口地址
url = hurl + "/file/getCaptcha1"
# headers需要的參數
headers = None
# 接口需要的參數
querystring = {"w": "70", "h": "29"}
# 發送請求
response = requests.request("GET", url, headers=headers, params=querystring, verify=False)
# 接口返回的數據以二進制的方式展示
img = response.content
# 選擇保存的路徑和圖片格式
with open('F:\MyPython\TestCode\data\code.jpg', 'wb') as f:
    # 保存
    f.write(img)
# 用Image模塊打開上一步保存的驗證碼
image = Image.open('F:\MyPython\TestCode\data\code.jpg')
# 識別驗證碼
optCode = pytesseract.image_to_string(image)
# 打印出驗證碼
print("驗證碼:", optCode)

2、通過截圖保存驗證碼并識別。

要截圖的話肯定需要界面,那么我們就需要借助selenium去操作了。
selenium這里也不講,大家應該都會吧。

import pytesseract
from PIL import Image
from selenium import webdriver
'''
調用接口請求驗證碼,保存到本地,識別驗證,檢查識別的驗證碼對不對。
'''
driver = webdriver.Chrome()
打開有驗證碼的界面
driver.get("https://www.XXXX.com/login")
# 比較好理解、截圖并保存到這個路徑
driver.get_screenshot_as_file('F:/VScode/LoarRunner/Vcode/homepage.png')
# 打開剛剛保存的圖片
im = Image.open('F:/VScode/LoarRunner/Vcode/homepage.png')
# 設置要裁剪的區域(驗證碼所在的區域)
box = (1214, 82, 1285, 111)
# 截圖,生成只有驗證碼的圖片
region = im.crop(box)
# 保存到本地路徑
region.save("F:/VScode/LoarRunner/Vcode/image_code.jpg")
# 讀取驗證碼圖片
image = Image.open("F:/VScode/LoarRunner/Vcode/image_code.jpg")
# 開始識別驗證碼
optCode = pytesseract.image_to_string(image)
# 打印出驗證碼
print(optCode)

總結

簡單的來說,識別圖片,驗證碼,文字啊,都可以這樣子操作。
但是驗證碼的處理遠遠沒有這么簡單。
畢竟啊,現在的驗證碼是越來越變態。
希望大家可以靈活應用圖形處理方法。
可以嘗試下識別照片上的文字什么的。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,526評論 6 427
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣。awesome-p...
    若與閱讀 18,685評論 4 418
  • 原文鏈接: http://www.lxweimin.com/p/9c6ae64a1bd7 GitHub 上有一個 A...
    李紹俊閱讀 6,116評論 0 92
  • 前言 相信大家利用 Python 寫的爬蟲應該遇到過要輸入驗證碼的尷尬局面,又或者寫了個自動填充表單的小程序,結果...
    迦度藍洛閱讀 16,596評論 2 35
  • 1.為什么學習設計模式 對于設計模式,我們并不陌生。一談起設計模式,腦海里馬上就想到單例模式,委托模式,觀察者模式...
    coder小鵬閱讀 4,033評論 13 16