使用python登录urp教务系统,并查询个人的全部成绩,其中有两个关键点的处理:

  • 1 验证码的识别,这里用到了pytesseract,但是识别率不高,只有50%。主要是只是用它进行简单的image_to_string转换。没有字符长度限制,也没有进行灰度二值化等进一步处理。所以最后改为了手动输入。下次来吧二维码识别这个坑把它填起吧。。。
  • 2 cookie处理,主要是要保证cookie一致性,也就是验证码链接的cookie和最后的post地址的cookie一致。先是用的Request但是怎么都登录不了,可能是还不太熟悉它吧。最后还是该为了urllib,urllib2,cookielib式的。成功登录。并保持cookie,查询了个人的全部成绩。
代码如下:
#!/usr/bin/env python
# coding=utf-8

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()

#image = Image.open(r'yzm.jpg')
#vcode = pytesseract.image_to_string(image)
#print vcode
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')