python通過(guò)pillow識(shí)別動(dòng)態(tài)驗(yàn)證碼的示例代碼
生活中,我們?cè)诘卿浳⒉?,郵箱的時(shí)候,常常會(huì)碰到驗(yàn)證碼。在工作時(shí),如果想要爬取一些數(shù)據(jù),也會(huì)碰到驗(yàn)證碼的阻礙。本次試驗(yàn)將帶領(lǐng)大家認(rèn)識(shí)驗(yàn)證碼的一些特性,并利用 Python 中的 pillow 庫(kù)完成對(duì)驗(yàn)證碼的破解。
環(huán)境配置
- Python 2.7
- Pillow 模塊
有個(gè)問(wèn)題就是python2.7目前只能讓使用到2020年,現(xiàn)在再利用2.7下載好多東西都會(huì)報(bào)錯(cuò),也該是時(shí)候更新到python3.7了,本文還是依賴(lài)于2.7的環(huán)境。

識(shí)別驗(yàn)證碼的代碼下載地址:python_captcha_jb51.rar
?安裝 pillow(PIL)庫(kù)
sudo apt-get update sudo apt-get install python-dev libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk sudo pip2 install pillow
識(shí)別過(guò)程
將驗(yàn)證碼文件python_captcha下載到運(yùn)行目錄下,解壓后,在 python_captcha 目錄新建 crack.py 文件,進(jìn)行編輯。
#-*- coding:utf8 -*-
from PIL import Image
im = Image.open("captcha.gif")
#(將圖片轉(zhuǎn)換為8位像素模式)
im.convert("P")
# 打印顏色直方圖
print im.histogram()
輸出:

顏色直方圖的每一位數(shù)字都代表了在圖片中含有對(duì)應(yīng)位的顏色的像素的數(shù)量。
每個(gè)像素點(diǎn)可表現(xiàn) 256 種顏色,你會(huì)發(fā)現(xiàn)白點(diǎn)是最多(白色序號(hào) 255 的位置,也就是最后一位,可以看到,有 625 個(gè)白色像素)。紅像素在序號(hào) 200 左右,我們可以通過(guò)排序,得到有用的顏色。
his = im.histogram()
values = {}
for i in range(256):
values[i] = his[i]
for j,k in sorted(values.items(),key=lambda x:x[1],reverse = True)[:10]:
print j, k
輸出:

我們得到了圖片中最多的 10 種顏色,其中 220 與 227 才是我們需要的紅色和灰色,可以通過(guò)這一訊息構(gòu)造一種黑白二值圖片。
#-*- coding:utf8 -*-
from PIL import Image
im = Image.open("captcha.gif")
im.convert("P")
im2 = Image.new("P",im.size,255)
for x in range(im.size[1]):
for y in range(im.size[0]):
pix = im.getpixel((y,x))
if pix == 220 or pix == 227: # these are the numbers to get
im2.putpixel((y,x),0)
im2.show()
輸出:

局限及遇到的問(wèn)題
#-*- coding:utf8 -*-
此行命令流在windows環(huán)境下運(yùn)行會(huì)報(bào)錯(cuò),具體原因可參考python(2)中文編碼亂碼問(wèn)題;
該命令流有很大的局限性,識(shí)別的動(dòng)態(tài)代買(mǎi)也只有此類(lèi):

到此這篇關(guān)于python通過(guò)pillow識(shí)別動(dòng)態(tài)驗(yàn)證碼的示例代碼的文章就介紹到這了,更多相關(guān)python pillow識(shí)別動(dòng)態(tài)驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python+selenium破解拼圖驗(yàn)證碼的腳本
- 利用Python生成隨機(jī)驗(yàn)證碼詳解
- Python實(shí)現(xiàn)隨機(jī)生成圖片驗(yàn)證碼詳解
- Python+Selenium+Pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別
- Python實(shí)現(xiàn)新版正方系統(tǒng)滑動(dòng)驗(yàn)證碼識(shí)別
- python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
- 基于Python實(shí)現(xiàn)原生的登錄驗(yàn)證碼詳情
- Python編程使用DRF實(shí)現(xiàn)一次性驗(yàn)證碼OTP
- 詳解Python結(jié)合Genetic?Algorithm算法破解網(wǎng)易易盾拼圖驗(yàn)證
相關(guān)文章
如何將一個(gè)CSV格式的文件分割成兩個(gè)CSV文件
這篇文章主要介紹了如何將一個(gè)CSV格式的文件分割成兩個(gè)CSV文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
python中偏函數(shù)partial用法實(shí)例分析
這篇文章主要介紹了python中偏函數(shù)partial用法,實(shí)例分析了偏函數(shù)partial的功能、定義及使用方法,需要的朋友可以參考下2015-07-07
Python3數(shù)據(jù)庫(kù)操作包pymysql的操作方法
這篇文章主要介紹了Python3數(shù)據(jù)庫(kù)操作包pymysql的操作方法,文章通過(guò)實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
在Python中處理字符串之ljust()方法的使用簡(jiǎn)介
這篇文章主要介紹了在Python中處理字符串之ljust()方法的使用,是Python學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05

