1. 程式人生 > >python 簡單圖像識別--驗證碼Ⅲ

python 簡單圖像識別--驗證碼Ⅲ

use 頁面 lte headers 新的 AR -a 提交 進行

python 簡單圖像識別--驗證碼Ⅲ

實現自動登陸網站

登錄學校圖書館管理系統為例,做一個簡單的例子。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-8
from PIL import Image
import pytesseract
import urllib2
import urllib
import PIL.ImageOps
import requests
import cookielib
import re
import 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訪問驗證碼地址,獲取cookie
local = 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‘,
}   # 根據抓包信息 構造headers
data = 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 result
except urllib2.HTTPError, e:
	print e.code

演示結果

技術分享圖片

python 簡單圖像識別--驗證碼Ⅲ