python帶驗證碼登入
阿新 • • 發佈:2019-02-16
本次登入的是中國石油大學ACM的OJ(管理員不要打我),原型是hustoj,選擇的原因是驗證碼比較簡單,純數字。
實際上利用了驗證碼頁面和登入頁面cookie的一致。
但是在順序上我們需要先開啟驗證碼頁面,有興趣可以簡單測試一下:
1.開啟登入頁面(不要關閉)(http://acm.cup.edu.cn/loginpage.php)
2.找到驗證碼圖片的地址開啟(http://acm.cup.edu.cn/vcode.php)
3.重新整理圖片地址,一般來說驗證碼會變
4.用那個變了的驗證碼去登入,變了的驗證碼肯定和登入頁面的不一致
5.你發現成功登陸了
ps:登入頁面和post頁面要區分開
from http.cookiejar import CookieJar from urllib.request import build_opener, HTTPCookieProcessor, Request from urllib.parse import urlencode from PIL import Image import pytesseract #請求 login = "http://acm.cup.edu.cn/login.php" header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} vcode = "http://acm.cup.edu.cn/vcode.php" cj = CookieJar() opener = build_opener(HTTPCookieProcessor(cj)) #開啟圖片並寫入 imgb = opener.open(vcode) local = open('vv.jpg','wb') local.write(imgb.read()) local.close() #vcode image = Image.open('vv.jpg') vv = pytesseract.image_to_string(image)#成功機率20%左右吧 data = urlencode({ 'user_id':'python', 'password':'python', 'vcode':''+vv, 'submit':'Submit' }).encode('utf-8') req = Request(login,data,header) opener.open(req) link = "http://acm.cup.edu.cn/modifypage.php" print(opener.open(link).read().decode('utf-8')) print(vv)#一般來說驗證碼對基本沒問題,成功的話可以在html頁面中找到兩個自己的使用者名稱