python 簡單Image Recognition--驗證碼Ⅲ

來源:互聯網
上載者:User

標籤:ror   highlight   code   src   tde   print   nec   open   inpu   

python  簡單Image Recognition--驗證碼Ⅲ

實現自動登陸網站

登入學校圖書館管理系統為例,做一個簡單的例子。python識別簡單的沒有幹擾的純數字驗證碼還是可以的,但是識別字母數字再加上幹擾因素,誤判率很高,因此這個我是採用”人工識別“,人工輸入。

首先得明白cookie的作用,cookie是某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料。因此我們需要用Cookielib模組來保持網站的cookie。

登入學校圖書館管理系統登陸(http://122.207.221.227:8080/opac/login),驗證碼(http://122.207.221.227:8080/kaptcha/goldlib)

可以發現這個驗證碼是動態更新的每次開啟都不一樣,一般這種驗證碼和cookie是同步的。想識別驗證碼肯定是吃力不討好的事,因此我們的思路是首先訪問驗證碼頁面,儲存驗證碼、擷取cookie用於登入,然後再直接向登入地址post資料。

先分析登入頁面需要post的request和header資訊

 

從中可以看出需要 post 的url並不是訪問的頁面,而是(http://122.207.221.227:8080/pages/include/checklogin.jsp)

其中需要提交的表單資料中 username 和 password 分別使用者名稱和密碼。

 

分析了上面的因素,下面就直接貼出代碼。

#coding=utf-8from PIL import Imageimport pytesseractimport urllib2import urllibimport PIL.ImageOpsimport requestsimport cookielibimport reimport sys‘‘‘圖書館登陸‘‘‘reload(sys)sys.setdefaultencoding("utf-8")  #防止中文報錯url = ‘http://122.207.221.227:8080/pages/include/checklogin.jsp‘capchaurl = ‘http://122.207.221.227:8080/kaptcha/0.5458022691509324‘cookie = cookielib.CookieJar()   # 將cookies綁定到一個opener  cookie由cookielib自動管理handler = urllib2.HTTPCookieProcessor(cookie)opener = urllib2.build_opener(handler)username=‘xxxxx‘password=‘xxxxx‘  #使用者名稱,密碼callNo = ‘callNo‘picture = opener.open(capchaurl).read()   # 用openr訪問驗證碼地址,擷取cookielocal = open(‘C:\Users\ww\Desktop\goldlib.jpg‘,"wb")   # 儲存驗證碼到本地local.write(picture)local.close()secrecode = raw_input(‘yanzhengma: ‘)   # 輸入驗證碼postData = {    ‘username‘: username,‘password‘: password,‘loginType‘: callNo,‘kaptcha‘: secrecode,}   # 抓包資訊 構造表單headers = {    ‘Accept‘: ‘*/*‘,‘Accept-Encoding‘: ‘gzip, deflate‘,‘Accept-Language‘: ‘zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2‘,‘Connection‘: ‘keep-alive‘,‘Content-Length‘: ‘64‘,‘Content-Type‘: ‘application/x-www-form-urlencoded‘,‘Host‘: ‘122.207.221.227:8080‘,‘Referer‘: ‘http://122.207.221.227:8080/opac/login‘,‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0‘,‘X-Requested-With‘: ‘XMLHttpRequest‘,}   # 根據抓包資訊 構造headersdata = urllib.urlencode(postData)  # 產生post資料 ?key1=value1&key2=value2的形式request = urllib2.Request(url,data,headers)  #構造request請求try:response = opener.open(request)result = response.read().decode(‘utf-8‘)print resultexcept urllib2.HTTPError, e:print e.code

 示範結果

 

python 簡單Image Recognition--驗證碼Ⅲ

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.