使用python登录urp教务系统,并查询个人的全部成绩,其中有两个关键点的处理:
- 1 验证码的识别,这里用到了pytesseract,但是识别率不高,只有50%。主要是只是用它进行简单的image_to_string转换。没有字符长度限制,也没有进行灰度二值化等进一步处理。所以最后改为了手动输入。下次来吧二维码识别这个坑把它填起吧。。。
- 2 cookie处理,主要是要保证cookie一致性,也就是验证码链接的cookie和最后的post地址的cookie一致。先是用的Request但是怎么都登录不了,可能是还不太熟悉它吧。最后还是该为了urllib,urllib2,cookielib式的。成功登录。并保持cookie,查询了个人的全部成绩。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
import urllib2 import urllib import cookielib import pytesseract from PIL import Image
cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener)
img_url = 'http://210.31.198.165/validateCodeAction.do?random=0.8987836507679621' img_ret = urllib2.urlopen(img_url) f = open("yzm.jpg", "wb") f.write(img_ret.read()) f.close()
user = raw_input('xuehao:') mm = raw_input('mima:') image =Image.open(r'yzm.jpg') image.show() vcode = raw_input('yzm:') data = {"zjh": user, "mm": mm, "v_yzm": vcode} post_data = urllib.urlencode(data) headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"} req = urllib2.Request( "http://210.31.198.165/loginAction.do", post_data, headers) response = opener.open(req) print response.read().decode('gb2312') data = {"xh":user} postdata = urllib.urlencode(data) cx=opener.open('http://210.31.198.165/reportFiles/student/cj_zwcjd_all.jsp') print cx.read().decode('gb2312')
|