国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用Python破解驗(yàn)證碼實(shí)例詳解

2020-02-23 04:10:20
字體:
供稿:網(wǎng)友

一、前言

本實(shí)驗(yàn)將通過一個簡單的例子來講解破解驗(yàn)證碼的原理,將學(xué)習(xí)和實(shí)踐以下知識點(diǎn):

      Python基本知識

      PIL模塊的使用

二、實(shí)例詳解

安裝 pillow(PIL)庫:

$ sudo apt-get update$ sudo apt-get install python-dev$ sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev /libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk$ sudo pip install pillow

下載實(shí)驗(yàn)用的文件:

$ wget http://labfile.oss.aliyuncs.com/courses/364/python_captcha.zip$ unzip python_captcha.zip$ cd python_captcha

這是我們實(shí)驗(yàn)使用的驗(yàn)證碼 captcha.gif


提取文本圖片

在工作目錄下新建 crack.py 文件,進(jìn)行編輯。

#-*- coding:utf8 -*-from PIL import Imageim = Image.open("captcha.gif")#(將圖片轉(zhuǎn)換為8位像素模式)im = im.convert("P")#打印顏色直方圖print im.histogram()

輸出:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0 , 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 2, 0, 1, 0, 0, 1, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 3, 1, 3, 3, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 132, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 15, 0 , 1, 0, 1, 0, 0, 8, 1, 0, 0, 0, 0, 1, 6, 0, 2, 0, 0, 0, 0, 18, 1, 1, 1, 1, 1, 2, 365, 115, 0, 1, 0, 0, 0, 135, 186, 0, 0, 1, 0, 0, 0, 116, 3, 0, 0, 0, 0, 0, 21, 1, 1, 0, 0, 0, 2, 10, 2, 0, 0, 0, 0, 2, 10, 0, 0, 0, 0, 1, 0, 625]

顏色直方圖的每一位數(shù)字都代表了在圖片中含有對應(yīng)位的顏色的像素的數(shù)量。

每個像素點(diǎn)可表現(xiàn)256種顏色,你會發(fā)現(xiàn)白點(diǎn)是最多(白色序號255的位置,也就是最后一位,可以看到,有625個白色像素)。紅像素在序號200左右,我們可以通過排序,得到有用的顏色。

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

輸出:

255 625212 365220 186219 135169 132227 116213 115234 21205 18184 15

我們得到了圖片中最多的10種顏色,其中 220 與 227 才是我們需要的紅色和灰色,可以通過這一訊息構(gòu)造一種黑白二值圖片。

#-*- coding:utf8 -*-from PIL import Imageim = Image.open("captcha.gif")im = 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()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北安市| 安国市| 佳木斯市| 凤翔县| 伊宁市| 交城县| 钦州市| 景谷| 商南县| 谷城县| 潞西市| 丹东市| 河南省| 凌云县| 神农架林区| 山丹县| 耒阳市| 濮阳市| 马关县| 驻马店市| 锡林郭勒盟| 乐昌市| 阿鲁科尔沁旗| 广宁县| 广平县| 沾化县| 尉犁县| 兰西县| 洛阳市| 鲁山县| 昌邑市| 特克斯县| 东辽县| 大宁县| 开化县| 台东县| 子长县| 岳西县| 都江堰市| 开平市| 瑞金市|