您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何通過Python做文字識別到破解圖片驗證碼的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1. 安裝包,直接在終端上輸入pip指令即可:
# 發送瀏覽器請求 pip3 install requests # 文字識別 pip3 install pytesseract # 圖片處理 pip3 install Pillow
2. 新建項目
需要的模塊安裝好后,新建一個項目wordsDistinguish。
在項目包下新建三個.py文件
test_pytesseract 和 test_pillow、case_verification。
test_pytesseract:模塊 pytesseract 的基本使用測試
test_pillow:模塊 Pillow 的基本使用測試
case_verification:實戰案例,破解網站圖片驗證碼驗證
1.Pillow 中的 Image
Python圖像庫中最重要的類是 Image,在模塊中定義的具有相同名稱的類。
可以通過多種方式創建此類的實例; 通過從文件加載圖像,處理其他圖像或從頭開始創建圖像。
# -*- coding: utf-8 -*- # 注意:print_function的導入必須在Image之前,否則會報錯 from __future__ import print_function from PIL import Image """ pillow 模塊 中 Image 的基本使用 """ # 1.打開圖片 im = Image.open("../wordsDistinguish/test1.jpg") print(im) # 2.查看圖片文件內容 print("圖片文件格式:"+im.format) print("圖片大小:"+str(im.size)) print("圖片模式:"+im.mode) # 3.顯示當前圖片對象 im.show() # 4.修改圖片大小,格式,保存 size = (50, 50) im.thumbnail(size) im.save("1.jpg", "PNG") # 5.圖片模式轉化并保存,L 表示灰度 RGB 表示彩色 im = im.convert("L") im.save("test1.jpg")
2. 基于 Tesseract-OCR 的 pytesseract
Python-tesseract是python的光學字符識別(OCR)工具。也就是說,它將識別并“讀取”嵌入圖像中的文本。
Python-tesseract是Google的Tesseract-OCR引擎的包裝器。
它作為獨立的調用腳本也很有用,因為它可以讀取Pillow和Leptonica成像庫支持的所有圖像類型,包括jpeg,png,gif,bmp,tiff等。
此外,如果用作腳本,Python-tesseract將打印已識別的文本,而不是將其寫入文件。
要在你的電腦上使用pytesseract模塊,你還需要安裝 Tesseract-OCR ,Mac上安裝該工具我比較建議使用Homebrew,安裝好后,直接在終端輸入下面指令即可:
Windows下安裝的話直接下載包即可,然后把其加入系統環境變量(即加入Path里),比較傻白甜,可以百度一下。
# -*- coding: utf-8 -*- # 從 Pillow 中導入圖片處理模塊 Image from PIL import Image # 導入基于 Tesseract 的文字識別模塊 pytesseract import pytesseract """ @pytesseract:https://github.com/madmaze/pytesseract """ # 打開圖片 im = Image.open("../wordsDistinguish/Resources/1.jpg") # 識別圖片內容 text = pytesseract.image_to_string(im) print(text)
1. 準備過程
登錄過程中需要輸入三個數據:賬號、密碼、驗證碼,首先在瀏覽器內實際登錄一次,按F12查看登錄流程。
輸入賬號密碼,和驗證碼,點擊登錄,注意Network內的變化。
2. 代碼敲起來
現在模擬登錄過程的難點主要有:驗證碼的識別和傳遞。
a.驗證碼識別我們根據前面的知識知識里的,直接采用pytesseract模塊。b.登錄參數傳遞,利用requests庫發送post請求即可,問題是如何把驗證碼和登錄聯系起來.
通過前面分析我們知道
驗證碼是在
“https://so.gushiwen.org/RandCode.ashx”里生成的,
而登錄頁面是
“https://so.gushiwen.org/user/login.aspx”,分析發現。
正常瀏覽器登錄這兩個網址的cookie是一致的,并且都帶有時間戳,所以,只要在代碼請求時保證兩者的cookie一致即可,這里我們利用requests庫的session方法可以實現。
# -*- coding: utf-8 -*- # 從 Pillow 中導入圖片處理模塊 Image from PIL import Image # 導入基于 Tesseract 的文字識別模塊 pytesseract import pytesseract # 導入發送網絡請求的庫 requests import requests # 導入正則庫 re import re """ 模擬登錄,破解字母數字圖片驗證碼 目標網站:https://so.gushiwen.org """ # 請求頭 headers = { "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36" } # 通過requests 創建一個 session 會話,保持兩次訪問 cookie 值相同 session = requests.session() # 下載識別驗證碼圖片函數 def get_verification(): # 生成驗證碼圖片url url = "https://so.gushiwen.org/RandCode.ashx" # 通過session發送get請求,獲取驗證碼 resp = session.get(url, headers=headers) # 將驗證碼保證到本地 with open(r"../wordsDistinguish/Resources/test.jpg", 'wb') as f: f.write(resp.content) # 打開驗證碼圖片文件 im = Image.open(r"../wordsDistinguish/Resources/test.jpg") # 基本處理,灰度處理,提升識別準確率 # 保存處理后的圖片 im.save("test.jpg") # 利用pytesseract進行圖片內容識別 text = pytesseract.image_to_string(im) # 去除識別結果中的非數字/字母內容 text = re.sub("\W", "", text) # 返回驗證碼內容 return text def do_login(): i = 0 # 識別錯誤次數 # 獲取驗證碼 captcha = get_verification() # 基本檢驗,驗證碼位數必須為四位 while len(captcha) != 4: captcha = get_verification() i = i + 1 # i+=1 print("第%d次識別錯誤" % i) print("開始登錄,驗證碼為:"+captcha) # 傳遞的登錄參數 data = { "from": "http://so.gushiwen.org/user/collect.aspx", "email": "你的注冊郵箱", "pwd": "你的登錄密碼", "code": captcha, "denglu": "登錄" } # 登錄地址 url = "https://so.gushiwen.org/user/login.aspx" # 利用 session 發送post請求 response = session.post(url, headers=headers, data=data) # 打印登錄后的狀態碼 print(response.status_code) # 保存登錄后的頁面內容,進一步確認是否登錄成功 with open("gsww.html", encoding="utf-8", mode="w") as f: f.write(response.content.decode()) # 開始程序 if __name__ == "__main__": do_login()
3. 運行結果
a.控制臺顯示一次驗證成功,返回狀態碼為:200,訪問正常。
b.進一步檢查,對獲取到的源碼進行檢查
我們在瀏覽器觀察登錄后的頁面發現,只有登錄后的頁面才有賬號管理模塊。
其中有用戶的唯一標識:綁定郵箱的后幾位,我的是50471@qq.com。
感謝各位的閱讀!關于“如何通過Python做文字識別到破解圖片驗證碼”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。