python驗證碼訓練
㈠ 如何利用python做簡單的驗證碼識別
1摘要
驗證碼是目前互聯網上非常常見也是非常重要的一個事物,充當著很多系統的防火牆功能,但是隨時OCR技術的發展,驗證碼暴露出來的安全問題也越來越嚴峻。本文介紹了一套字元驗證碼識別的完整流程,對於驗證碼安全和OCR識別技術都有一定的借鑒意義。
然後經過了一年的時間,筆者又研究和get到了一種更強大的基於CNN卷積神經網路的直接端到端的驗證識別技術(文章不是我的,然後我把源碼整理了下,介紹和源碼在這裡面):
基於python語言的tensorflow的『端到端』的字元型驗證碼識別源碼整理(github源碼分享)
2關鍵詞
關鍵詞:安全,字元圖片,驗證碼識別,OCR,Python,SVM,PIL
3免責聲明
本文研究所用素材來自於某舊Web框架的網站完全對外公開的公共圖片資源。
本文只做了該網站對外公開的公共圖片資源進行了爬取,並未越權做任何多餘操作。
本文在書寫相關報告的時候已經隱去漏洞網站的身份信息。
本文作者已經通知網站相關人員此系統漏洞,並積極向新系統轉移。
本報告的主要目的也僅是用於OCR交流學習和引起大家對驗證安全的警覺。
4引言
關於驗證碼的非技術部分的介紹,可以參考以前寫的一篇科普類的文章:
互聯網安全防火牆(1)--網路驗證碼的科普
裡面對驗證碼的種類,使用場景,作用,主要的識別技術等等進行了講解,然而並沒有涉及到任何技術內容。本章內容則作為它的技術補充來給出相應的識別的解決方案,讓讀者對驗證碼的功能及安全性問題有更深刻的認識。
5基本工具
要達到本文的目的,只需要簡單的編程知識即可,因為現在的機器學習領域的蓬勃發展,已經有很多封裝好的開源解決方案來進行機器學習。普通程序員已經不需要了解復雜的數學原理,即可以實現對這些工具的應用了。
主要開發環境:
python3.5
python SDK版本
PIL
圖片處理庫
libsvm
開源的svm機器學習庫
准備原始圖片素材
圖片預處理
圖片字元切割
圖片尺寸歸一化
圖片字元標記
字元圖片特徵提取
生成特徵和標記對應的訓練數據集
訓練特徵標記數據生成識別模型
使用識別模型預測新的未知圖片集
達到根據「圖片」就能返回識別正確的字元集的目標
- def get_feature(img): """
- 獲取指定圖片的特徵值,
- 1. 按照每排的像素點,高度為10,則有10個維度,然後為6列,總共16個維度
- :param img_path:
- :return:一個維度為10(高度)的列表 """
- width, height = img.size
- pixel_cnt_list = []
- height = 10 for y in range(height):
- pix_cnt_x = 0 for x in range(width): if img.getpixel((x, y)) == 0: # 黑色點
- pix_cnt_x += 1
- pixel_cnt_list.append(pix_cnt_x) for x in range(width):
- pix_cnt_y = 0 for y in range(height): if img.getpixel((x, y)) == 0: # 黑色點
- pix_cnt_y += 1
- pixel_cnt_list.append(pix_cnt_y) return pixel_cnt_list
關於環境的安裝,不是本文的重點,故略去。
6基本流程
一般情況下,對於字元型驗證碼的識別流程如下:
7素材准備
7.1素材選擇
由於本文是以初級的學習研究目的為主,要求「有代表性,但又不會太難」,所以就直接在網上找個比較有代表性的簡單的字元型驗證碼(感覺像在找漏洞一樣)。
最後在一個比較舊的網站(估計是幾十年前的網站框架)找到了這個驗證碼圖片。
原始圖:
然後就將圖片素材特徵化,按照libSVM指定的格式生成一組帶特徵值和標記值的向量文
㈡ python簡單驗證碼識別的實現過程
demo :
import pytesseract
from PIL import Image
image = Image.open("captcha.png")
print(pytesseract.image_to_string(image))
=================================================
=================================================中文識別
import pytesseract
from PIL import Image
image = Image.open("00.jpg")
print(pytesseract.image_to_string(image,lang='chi_sim'))
有時候文本識別率並不高,建議圖像識別前,先對圖像進行灰度化和 二值化
效果如下(有時候第一次辯舉好可能識別失敗,可以寫個循環邏輯讓它多識別幾次攜鉛,一般程序運答拆行1-3次基本會識別成功):
㈢ python如何識別驗證碼
我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現,現在也很常見,一般由4位字母或者數字組成。例如,中國知網的注冊頁面有類似的驗證碼,頁面如下所示:
表單中最後一項就是圖形驗證碼,我們必須完全正確輸入圖中的字元才可以完成注冊。
更多有關驗證碼的知識,可以參考這些文章:
Python3爬蟲進階:識別圖形驗證碼
Python3爬蟲進階:識別極驗滑動驗證碼
Python3爬蟲進階:識別點觸點選驗證碼
Python3爬蟲進階:識別微博宮格驗證碼
·本節目標以知網的驗證碼為例,講解利用OCR技術識別圖形驗證碼的方法。
·准備工作識別圖形驗證碼需要庫tesserocr,以mac安裝為例:在mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫: brew install imagemagickbrew install tesseract 接下來再安裝tesserocr即可:pip3 install tesserocr pillow這樣我們就完成了 tesserocr的安裝。
·獲取驗證碼為了便於實驗,我們先將驗證碼的圖片保存到本地。打開開發者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的ser屬 性是CheckCode.aspk。所以我們直接打開如下鏈接就可以看到一個驗證碼,右鍵保存即可,將其命名為code.jpg:
這樣我們就得到一張驗證碼圖片,以供測試識別使用。
相關推薦:《Python教程》
識別測試
接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用tesserocr庫識別該驗證碼,代碼如下所示:
這里我們新建了一個Image對戲那個,調用了tesserocr的image_to_text( )方法。傳入該Image對象即可完成識別,實現過程非常簡單,結果如下:
我們可以看到,識別的結果和實際結果有偏差,這是因為驗證碼內的多餘線條干擾了圖片的識別。
另外,tesserocr還有一個更加簡單的方法,這個方法可以直接將圖片文件轉為字元串,代碼如下:
不過這種方法的識別效果不如上一種的好。
驗證碼處理
對於上面的圖片,我們可以看到其實並沒有完全識別正確,所以我們需要對圖像作進一步的處理,如灰度轉換、二值化等操作。
我們可以利用Image對象的convert( )方法參數傳入L,即可將圖片轉化為灰度圖像,代碼如下:
傳入1即可將圖片進行二值化處理,如下所示:
我們還可以指定二值化的閾值。上面的方法採用的是默認閾值127。不過我們不能直接轉化原圖,要將原圖先轉化為灰度圖像,然後再指定二值化閾值,代碼如下:
在這里,變數threshold代表二值化閾值,閾值設置為160,之後我們來看看我們的結果:
我們可以看到現在的二維碼就比較方便我們進行識別了;那麼對於一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。
㈣ 驗證碼識別之模板匹配方法
在寫爬蟲的時候難免會遇到驗證碼識別的問題,常見的驗證碼識別的流程為:
- 圖像灰度化
- 圖像去噪(如圖像二值化)
- 切割圖片
- 提取特徵
- 訓練
但這種方法要切割圖片,而且破解驗證碼的重點和難點就在於 能否成功分割字元 。
本文要介紹的演算法 不需要進行圖片切割,也不需要進行機器訓練 ,這種方法就是模板匹配:將待識別的文字切割成一個個模板,在待識別的圖像中去匹配模板。
這篇文章將分為兩個部分:
第一部分介紹模板匹配的基本概念以及模板匹配的一種實現演算法:快速歸一化互相關匹配演算法;
第二部分是一個具體實例。
模板匹配是在圖像中尋找目標的方法之一,目的就是在一幅圖像中尋找和模板圖像最相似的區域。
模板匹配的大致過程是這樣的:通過在輸入圖像上滑動圖像塊對實際的圖像塊和輸入圖像進行匹配。
假設我們有一張100x100的輸入圖像,有一張10x10的模板圖像,查找的過程是這樣的:
從輸入圖像的左上角(0,0)開始,切割一塊(0,0)至(10,10)的臨時圖像;
用某種方法得出臨時圖像與模板的相似度c,存放到相似度矩陣中(矩陣大小為91 x91);
切割輸入圖像從(0,1)至(10,11)的臨時圖像,對比,並記錄到相似度矩陣;
重復上述步驟,直到輸入圖像的右下角。
最終得到一個相似度矩陣,找到矩陣中的最大或最小值,最大值(最小值)對應的臨時圖像即為與模板最相似的圖像。
在步驟b中,求模板與圖像的相似度有多種方法,如平均絕對差演算法(MAD)、絕對誤差和演算法(SAD)、誤差平方和演算法(SSD)、歸一化互相關演算法(NCC),本文使用的是歸一化互相關演算法。
什麼是歸一化互相關?
從幾何圖形上來看,空間中的兩個向量,同方向平行時,歸一化互相關系數為1,表示兩個向量最相似,反方向平行時歸一化互相關系數為-1,垂直時為0,表示最不相似(用互相垂直的三個向量來代表整個空間也是這個道理,垂直的向量之間不包含對方的信息,相關系數為0),存在一定夾角時處於(-1,1),是不是跟餘弦函數很像,cos(0)=1,cos(pi/2)=0,cos(pi)=-1。就是這個樣子的,相關系數可以看作是兩個向量之間夾角的cosine函數。
在數學中是這么計算cosine函數的,假設兩個n維向量X,Y,對應的坐標分別為(x1,x2,…xn), (y1,y2,…yn) 則:
(如果想要了解更多,請參考文獻【2】)
但這是一維的,在模板匹配中要再加一個維度 (具體演算法請參考文獻【3】) ,簡要說一下文獻【3】的內容:如果直接計算二維相似度的話計算復雜度會非常高,文獻【3】利用快速傅里葉變換與積分圖像快速演算法來降低計算復雜度。
接下來讓我們看一個具體的應用。
模板匹配識別驗證碼的具體步驟為:
1. 找出圖片中所有可能出現的字元,製作成模板集合
2. 圖像灰度化
3. 圖片去噪(二值化)
4. 模板匹配
5. 匹配結果優化
要識別的圖片如下,以識別圖片中的加字為例:
要從image中找到與模板最匹配的部分,Template圖像是事先從image圖像中截取的一部分。所用的為python模塊skimage中的match_template方法,match_template方法使用的是快速歸一化互相關演算法 【2】 。
遍歷模板圖像集合,與圖像匹配,如果dist大於閾值h,則認為此模板在圖像中存在,否則不存在,繼續匹配下一個模板,直到遍歷完所有模板。
以模板『加』為例,圖像大小為40x260,模板大小27x27,result是一個大小為(14,234)的矩陣,即上文提到的相似度矩陣,矩陣中的數值屬於[-1,1],找到result中最大值所處的對應位置即為與模板最匹配的圖像位置:x=66,y=11,正好對應模板圖像在image中所處的位置。 (更多內容請參閱參考文獻【4】)
但這是比較好的情況,因為在匹配時遍歷了所有的模板,而一張圖片中出現的模板數量是有限的,比如數字』四』在圖片中是沒有的,這時就要根據某種規則去掉這些在圖片中沒有出現的模板:程序中使用dist變數來過濾匹配結果,如果dist變數大於某個值則認為此模板在圖像中不存在。
最後的result_list中可能仍然存在一些圖片中不存在的模板或者匹配不精確的模板,比如數字『一』在模板中不存在,但仍然可以匹配到,因為數字『二』中可以匹配到『一』,需要進一步優化,優化方法有很多,比如當匹配到的兩個模板距離過近時,選擇較大的那個模板,其餘方法留給讀者自行考慮吧。
後續將會推出如何使用深度學習識別驗證碼,敬請期待~
參考文獻:
http://www.cnblogs.com/beer/p/5672678.html
http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
J. P. Lewis, 「Fast Normalized Cross-Correlation」, Instrial Light and Magic.
http://scikit-image.org/docsjinhqin/dev/auto_examples/plot_template.html
本文作者 :李暉(點融黑幫),畢業於電子科技大學,現就職於點融成都Data部門,對一切新鮮事物充滿好奇,對跳舞毫無抵抗力的活力女青年一枚。
㈤ 如何用Python+人工識別處理知乎的倒立漢字驗證碼
這給Python爬蟲的模擬登錄帶來了一定的難度,目前網路上的相關資料針對的都是普通的「英文+數字」驗證碼,針對「倒立漢字」驗證碼的文章較少。而且大家普遍採用的是requests庫。經過幾天的研究,我採用urllib.request實現了模擬登陸知乎,現將代碼分享如下:
[python] view plain
# 登錄知乎,通過保存驗證圖片方式
import urllib.request
import urllib.parse
import time
import http.cookiejar
webUrl = "l"#不能寫因為不支持重定向
webheader = {
# 'Accept': 'text/html, application/xhtml+xml, */*',
# 'Accept-Language': 'zh-CN',
# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36',
# 'User-Agent': 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
# 'DNT': '1',
# 'Connection': 'Keep-Alive'
}
postData = {
'email': '在這里寫你的賬號',
'captcha_type': 'cn',
'password': '在這里寫你的密碼',
'_xsrf': '',
'captcha': ''
}
localStorePath = "寫你想保存的驗證碼圖片的地址"
if __name__ == '__main__':
#聲明一個CookieJar對象實例來保存cookie
cookie = http.cookiejar.CookieJar()
#創建opener
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)#建立opener對象,並添加頭信息
urllib.request.install_opener(opener)
captcha_url = '?r=%d&type=login&lang=cn' % (time.time() * 1000)
# captcha_url = '/captcha.gif?r=%d&type=login' % (time.time() * 1000)#這樣獲得的是「字母+數字驗證碼」
#這個獲取驗證碼圖片的方法是不行的!
# urllib.request.urlretrieve(captcha_url, localStorePath + 'myCaptcha.gif')
#用urlopen函數保存驗證圖片
req = urllib.request.Request(url=captcha_url,headers=webheader)
content = urllib.request.urlopen(req)
# content = opener.open(req)
captcha_name = 'D:/Python學習/crawler_learning/知乎登錄專題研究/知乎驗證碼圖片/myNewCaptcha.gif'
content = content.read()
with open(captcha_name, 'wb') as f:
f.write(content)
postData['captcha'] = input('請輸入驗證碼')
# postData['_xsrf'] = get_xsrf()
postData['_xsrf'] = ''
print(postData['_xsrf'])
#用urlopen函數傳送數據給伺服器實現登錄
postData_encoded = urllib.parse.urlencode(postData).encode('utf-8')
req = urllib.request.Request(url=webUrl,data=postData_encoded,headers=webheader)
webPage = urllib.request.urlopen(req)
# webPage = opener.open(req)
data = webPage.read().decode('utf-8')
print(data)
with open("D:/知乎伺服器反饋的內容.txt",mode='w',encoding='utf-8') as dataFile:
dataFile.write(data)
幾點思考:
1、首先需要明確如何獲得驗證碼圖片的地址,利用Fiddler抓包獲得的典型的驗證碼圖片的地址如下:
這個「r」代表的是什麼含義呢?經過查看知乎上的js代碼可以確定,這個r指的是毫秒級的時間戳。
2、以驗證碼圖片地址cn為例,不同時間訪問同一個驗證碼圖片地址,得到的驗證碼圖片是不同的,那麼知乎伺服器是如何知道你獲取的是那張驗證碼呢?
我認為是通過sessionID,換句話說,知乎把某個驗證碼圖片給了你,同時知乎記錄下了你的sessionID和這個驗證碼的「正確答案」,這樣將來你輸入驗證碼給知乎後,知乎就能判斷你輸入的驗證碼是否正確了。
由於sessionID保存在cookie之中,所以Python模擬登陸的代碼必須使用cookie。
3、獲取驗證碼圖片的時候,我用的是content =urllib.request.urlopen (req)函數,經過我的驗證,用
urllib.request.urlretrieve函數是不行的,因為urlopen函數可以傳遞headers參數,而這一個參數必須有。
4、獲得了倒立漢字圖片以後,如何確定要傳遞給知乎的captcha是什麼呢?經過Fiddler抓包,
傳遞的參數類似於這樣:
{"img_size":[200,44],"input_points":[[43.44,22.44],[115.72,22.44]]}
經過分析和試驗確定:200指的是圖片長度,44指的是圖片高度,後面的input_points指的是打在倒立漢字上的點的坐標。由於每次出現7個漢字,這7個漢字的坐標是固定的,我全部進行捕獲:
{"img_size":[200,44],"input_points":[[12.95,14.969999999999998],[36.1,16.009999999999998],[57.16,24.44],[84.52,19.17],[108.72,28.64],[132.95,24.44],[151.89,23.380000000000002]]}
然後,問題就簡單了:將圖片保存在本地之後,打開圖片,確定哪幾個漢字倒立,比如說第2個和第6個,那就在上面選取出2和6的坐標輸入即可,即
{"img_size":[200,44],"input_points":[[36.1,16.009999999999998],[132.95,24.44]]}。
5、小竅門:以驗證碼圖片地址
㈥ Python 模擬登陸遇到驗證碼怎麼辦
方法1:找個驗證碼識別程晌桐序,自動識別
方法2:自己用PIL寫一個
方法3:讓用戶手工輸入驗埋孫證碼。這個比較簡單
方法4:讓後台程序開一個後門宴液坦,讓你繞過驗證碼
方法5:直接使用cookie,這樣就不用登陸了
㈦ Python開發文字點選驗證碼,有什麼推薦的方法
文字點選驗證碼(Click Captcha)是一種常見的驗證碼形式,納雹通常由若干個字元或單片語成,要求用戶點擊其中指定的字元或單詞,以驗證用戶身份。
在Python開發中實現文字點選驗證碼,一種常用的方法是使用圖像處理庫和機器學習庫,以下是一些常用的庫和方法:
PIL庫:Python Imaging Library(PIL)是一個Python圖像處理庫,提供了豐富的圖像處理功能,包括圖像讀寫、縮放、旋轉、裁剪、濾波等。可以使用PIL庫生成包含隨機字元的驗證碼圖片,並將其保存為本地文件。
OpenCV庫:OpenCV是一個計算機視覺庫,提供了大量的圖像處理和計算機視覺演算法,包括圖像讀寫、濾波、邊緣檢測、特徵提取等。可以使用OpenCV庫對驗證碼圖片進行預處理,提取出驗證碼中的字元或單詞,以便後續的識別。
PyTesseract庫伍和:PyTesseract是一個Python的OCR庫,基於Google的Tesseract-OCR引擎,可以對圖像中的文字進行識別。可以使用PyTesseract庫對驗證碼圖片中的字元或單詞進行識別和分類。
KNN演算法:KNN是一種常用的機器學習演算法,可以用於對驗證腔茄盯碼圖片中的字元或單詞進行分類。可以使用KNN演算法對預處理後的驗證碼圖片進行特徵提取和分類,以識別出驗證碼中的正確字元或單詞。
綜合使用以上方法,可以實現一個較為穩定和准確的文字點選驗證碼。具體實現細節需要根據具體情況進行調整和優化。
㈧ 如何利用Python做簡單的驗證碼識別
先是獲取驗證碼樣本。。。我存了大概500個。
用dia測了測每個字之間的間距,直接用PIL開始切。
from PIL import Image
for j in range(0,500):
f=Image.open("../test{}.jpg".format(j))
for i in range(0,4):
f.crop((20+20*i,0,40+20*i,40)).save("test{0}-{1}.jpg".format(j,i+1))
上面一段腳本的意思是把jpg切成四個小塊然後保存
之後就是二值化啦。
def TotallyShit(im):
x,y=im.size
mmltilist=list()
for i in range(x):
for j in range(y):
if im.getpixel((i,j))<200:
mmltilist.append(1)
else:
mmltilist.append(0)
return mmltilist
咳咳,不要在意函數的名字。上面的一段代碼的意思是遍歷圖片的每個像素點,顏色數值小於200的用1表示,其他的用0表示。
其中的im代表的是Image.open()類型。
切好的圖片長這樣的。
只能說這樣切的圖片還是很粗糙,很僵硬。
下面就是分類啦。
把0-9,「+」,」-「的圖片挑好並放在不同的文件夾裡面,這里就是純體力活了。
再之後就是模型建立了。
這里我試了自己寫的還有sklearn svm和sklearn neural_network。發現最後一個的識別正確率高的多。不知道是不是我樣本問題QAQ。
下面是模型建立的代碼
from sklearn.neural_network import MLPClassifier
import numpy as np
def clf():
clf=MLPClassifier()
mmltilist=list()
X=list()
for i in range(0,12):
for j in os.listdir("douplings/douplings-{}".format(i)):
mmltilist.append(TotallyShit(Image.open("douplings/douplings-{0}/{1}".format(i,j)).convert("L")))
X.append(i)
clf.fit(mmltilist,X)
return clf
大概的意思是從圖片源中讀取圖片和label然後放到模型中去跑吧。
之後便是圖像匹配啦。
def get_captcha(self):
with open("test.jpg","wb") as f:
f.write(self.session.get(self.live_captcha_url).content)
gim=Image.open("test.jpg").convert("L")
recognize_list=list()
for i in range(0,4):
part=TotallyShit(gim.crop((20+20*i,0,40+20*i,40)))
np_part_array=np.array(part).reshape(1,-1)
predict_num=int(self.clf.predict(np_part_array)[0])
if predict_num==11:
recognize_list.append("+")
elif predict_num==10:
recognize_list.append("-")
else:
recognize_list.append(str(predict_num))
return ''.join(recognize_list)
最後eval一下識別出來的字元串就得出結果了。。
順便提一句現在的bilibili登陸改成rsa加密了,麻蛋,以前的腳本全部作廢,心好痛。
登陸的代碼。
import time
import requests
import rsa
r=requests.session()
data=r.get("act=getkey&_="+str(int(time.time()*1000))).json()
pub_key=rsa.PublicKey.load_pkcs1_openssl_pem(data['key'])
payload = {
'keep': 1,
'captcha': '',
'userid': "youruserid",
'pwd': b64encode(rsa.encrypt((data['hash'] +"yourpassword").encode(), pub_key)).decode(),
}
r.post("",data=payload)
㈨ python爬驗證碼
1.找地址
首先,我們要找到這個網站生成驗證碼的地址,這個地址我們可以通過查看他的源代碼來實現。
1.找地址
首先,我們要找到這個網站生成驗證碼的地址,這個地址我們可以通過查看他的源代碼來實現。
就以某大學教務網為例,這個教務網的模板很多學校都在採用:
我就截取表單的驗證碼部分即可。
<tdalign="center"rowspan="3">
<imgid="imgCode"src="../sys/ValidateCode.aspx"
onclick="changeValidateCode(this)"alt="單擊可更換圖片!"
style="CURSOR:pointer;">
<br>看不清,則單擊圖片!
</td>123456123456
這里就可以知道,地址就是../sys/ValidateCode.aspx
組合一下地址就是http://jwmis.lmu.cn/sys/ValidateCode.aspx
也就是我們等一下要用到的地址了。
我們可以查看一下那個網頁。
2.處理圖片
去查看了一下那個地址
果不其然,都是亂碼,因為驗證碼分為兩種。
1)直接處理成JPG/GIF/PNG或者其他格式,然後直接讀取到一個圖片地址。
2)接收用戶觸發,然後生成,再直接處理成圖像,不讀取到一個圖片地址。
我們這里是第二種,我們要自己來讀取他,到本地,再手動輸入驗證碼。
#-*-coding:utf-8-*-
importurllib2
#驗證碼的處理#
#驗證碼生成頁面的地址#
im_url='http://jwmis.lmu.cn/sys/ValidateCode.aspx'
#讀取驗證碼圖片#
im_data=urllib2.urlopen(im_url).read()
#打開一個Code.PNG文件在D盤,沒有的話自動生成#
f=open('d:\Code.png','wb')
#寫入圖片內容#
f.write(im_data)
#關閉文件#
f.close()
這里包括兩個部分:
1)打開那個生成驗證碼圖片的頁面,讀取
2)將讀取到的內容,保存成圖片,下載到本地
我們這里的地址是可以隨便寫的,保存在你想保存的地方。
到這里我們就完成了驗證碼的一小部分。
by–LoDog
希望能幫到你!