如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

這篇文章給大家分享的是有關(guān)如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供措美網(wǎng)站建設(shè)、措美做網(wǎng)站、措美網(wǎng)站設(shè)計(jì)、措美網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、措美企業(yè)網(wǎng)站模板建站服務(wù),10余年措美做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

前期準(zhǔn)備

1. 安裝包,直接在終端上輸入pip指令即可:

# 發(fā)送瀏覽器請(qǐng)求
pip3 install requests
# 文字識(shí)別
pip3 install pytesseract
# 圖片處理
pip3 install Pillow

2. 新建項(xiàng)目

需要的模塊安裝好后,新建一個(gè)項(xiàng)目wordsDistinguish。

在項(xiàng)目包下新建三個(gè).py文件

test_pytesseract 和 test_pillow、case_verification。

test_pytesseract:模塊 pytesseract 的基本使用測試
test_pillow:模塊 Pillow 的基本使用測試
case_verification:實(shí)戰(zhàn)案例,破解網(wǎng)站圖片驗(yàn)證碼驗(yàn)證

涉及知識(shí)

1.Pillow 中的 Image

Python圖像庫中最重要的類是 Image,在模塊中定義的具有相同名稱的類。

可以通過多種方式創(chuàng)建此類的實(shí)例; 通過從文件加載圖像,處理其他圖像或從頭開始創(chuàng)建圖像。

# -*- coding: utf-8 -*-


# 注意:print_function的導(dǎo)入必須在Image之前,否則會(huì)報(bào)錯(cuò)
from __future__ import print_function
from PIL import Image
"""
pillow 模塊 中 Image 的基本使用
"""


# 1.打開圖片
im = Image.open("../wordsDistinguish/test1.jpg")
print(im)

# 2.查看圖片文件內(nèi)容
print("圖片文件格式:"+im.format)
print("圖片大?。?quot;+str(im.size))
print("圖片模式:"+im.mode)

# 3.顯示當(dāng)前圖片對(duì)象
im.show()

# 4.修改圖片大小,格式,保存
size = (50, 50)
im.thumbnail(size)
im.save("1.jpg", "PNG")

# 5.圖片模式轉(zhuǎn)化并保存,L 表示灰度 RGB 表示彩色
im = im.convert("L")
im.save("test1.jpg")

2. 基于 Tesseract-OCR 的 pytesseract

Python-tesseract是python的光學(xué)字符識(shí)別(OCR)工具。也就是說,它將識(shí)別并“讀取”嵌入圖像中的文本。

Python-tesseract是Google的Tesseract-OCR引擎的包裝器。

它作為獨(dú)立的調(diào)用腳本也很有用,因?yàn)樗梢宰x取Pillow和Leptonica成像庫支持的所有圖像類型,包括jpeg,png,gif,bmp,tiff等。

此外,如果用作腳本,Python-tesseract將打印已識(shí)別的文本,而不是將其寫入文件。

要在你的電腦上使用pytesseract模塊,你還需要安裝 Tesseract-OCR ,Mac上安裝該工具我比較建議使用Homebrew,安裝好后,直接在終端輸入下面指令即可:

如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

Windows下安裝的話直接下載包即可,然后把其加入系統(tǒng)環(huán)境變量(即加入Path里),比較傻白甜,可以百度一下。

# -*- coding: utf-8 -*-

# 從 Pillow 中導(dǎo)入圖片處理模塊 Image
from PIL import Image
# 導(dǎo)入基于 Tesseract 的文字識(shí)別模塊 pytesseract
import pytesseract
"""
@pytesseract:https://github.com/madmaze/pytesseract
"""

# 打開圖片
im = Image.open("../wordsDistinguish/Resources/1.jpg")
# 識(shí)別圖片內(nèi)容
text = pytesseract.image_to_string(im)
print(text)

如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

1. 準(zhǔn)備過程

登錄過程中需要輸入三個(gè)數(shù)據(jù):賬號(hào)、密碼、驗(yàn)證碼,首先在瀏覽器內(nèi)實(shí)際登錄一次,按F12查看登錄流程。

輸入賬號(hào)密碼,和驗(yàn)證碼,點(diǎn)擊登錄,注意Network內(nèi)的變化。

如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

2. 代碼敲起來

現(xiàn)在模擬登錄過程的難點(diǎn)主要有:驗(yàn)證碼的識(shí)別和傳遞。

a.驗(yàn)證碼識(shí)別我們根據(jù)前面的知識(shí)知識(shí)里的,直接采用pytesseract模塊。b.登錄參數(shù)傳遞,利用requests庫發(fā)送post請(qǐng)求即可,問題是如何把驗(yàn)證碼和登錄聯(lián)系起來.

通過前面分析我們知道

驗(yàn)證碼是在

“https://so.gushiwen.org/RandCode.ashx”里生成的,

而登錄頁面是

“https://so.gushiwen.org/user/login.aspx”,分析發(fā)現(xiàn)。

正常瀏覽器登錄這兩個(gè)網(wǎng)址的cookie是一致的,并且都帶有時(shí)間戳,所以,只要在代碼請(qǐng)求時(shí)保證兩者的cookie一致即可,這里我們利用requests庫的session方法可以實(shí)現(xiàn)。

# -*- coding: utf-8 -*-

# 從 Pillow 中導(dǎo)入圖片處理模塊 Image
from PIL import Image
# 導(dǎo)入基于 Tesseract 的文字識(shí)別模塊 pytesseract
import pytesseract
# 導(dǎo)入發(fā)送網(wǎng)絡(luò)請(qǐng)求的庫 requests
import requests
# 導(dǎo)入正則庫 re
import re
"""
模擬登錄,破解字母數(shù)字圖片驗(yàn)證碼
目標(biāo)網(wǎng)站:https://so.gushiwen.org
"""
# 請(qǐng)求頭
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 創(chuàng)建一個(gè) session 會(huì)話,保持兩次訪問 cookie 值相同
session = requests.session()


# 下載識(shí)別驗(yàn)證碼圖片函數(shù)
def get_verification():
    # 生成驗(yàn)證碼圖片url
    url = "https://so.gushiwen.org/RandCode.ashx"
    # 通過session發(fā)送get請(qǐng)求,獲取驗(yàn)證碼
    resp = session.get(url, headers=headers)
    # 將驗(yàn)證碼保證到本地
    with open(r"../wordsDistinguish/Resources/test.jpg", 'wb') as f:
        f.write(resp.content)
    # 打開驗(yàn)證碼圖片文件
    im = Image.open(r"../wordsDistinguish/Resources/test.jpg")
    # 基本處理,灰度處理,提升識(shí)別準(zhǔn)確率
    # 保存處理后的圖片
    im.save("test.jpg")
    # 利用pytesseract進(jìn)行圖片內(nèi)容識(shí)別
    text = pytesseract.image_to_string(im)
    # 去除識(shí)別結(jié)果中的非數(shù)字/字母內(nèi)容
    text = re.sub("\W", "", text)
    # 返回驗(yàn)證碼內(nèi)容
    return text


def do_login():

    i = 0   # 識(shí)別錯(cuò)誤次數(shù)
    # 獲取驗(yàn)證碼
    captcha = get_verification()
    # 基本檢驗(yàn),驗(yàn)證碼位數(shù)必須為四位
    while len(captcha) != 4:
        captcha = get_verification()
        i = i + 1  # i+=1
        print("第%d次識(shí)別錯(cuò)誤" % i)

    print("開始登錄,驗(yàn)證碼為:"+captcha)
    # 傳遞的登錄參數(shù)
    data = {
        "from": "http://so.gushiwen.org/user/collect.aspx",
        "email": "你的注冊(cè)郵箱",
        "pwd": "你的登錄密碼",
        "code": captcha,
        "denglu": "登錄"
    }
    # 登錄地址
    url = "https://so.gushiwen.org/user/login.aspx"
    # 利用 session 發(fā)送post請(qǐng)求
    response = session.post(url, headers=headers, data=data)
    # 打印登錄后的狀態(tài)碼
    print(response.status_code)
    # 保存登錄后的頁面內(nèi)容,進(jìn)一步確認(rèn)是否登錄成功
    with open("gsww.html", encoding="utf-8", mode="w") as f:
        f.write(response.content.decode())


# 開始程序
if __name__ == "__main__":
    do_login()

3. 運(yùn)行結(jié)果

a.控制臺(tái)顯示一次驗(yàn)證成功,返回狀態(tài)碼為:200,訪問正常。

如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

b.進(jìn)一步檢查,對(duì)獲取到的源碼進(jìn)行檢查

我們?cè)跒g覽器觀察登錄后的頁面發(fā)現(xiàn),只有登錄后的頁面才有賬號(hào)管理模塊。

其中有用戶的唯一標(biāo)識(shí):綁定郵箱的后幾位,我的是50471@qq.com。

如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼

感謝各位的閱讀!關(guān)于“如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

分享標(biāo)題:如何通過Python做文字識(shí)別到破解圖片驗(yàn)證碼
URL分享:http://muchs.cn/article24/gddjce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站制作網(wǎng)站維護(hù)、網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)