Sept. 19, 2012, 6:10 p.m.
今天恰好帮同学研究如何模拟登陆上正方系统,制作查询信息的小工具
学校正方系统入口处无验证码,问题瞬间简单许多。
同学直接post账号密码失败 ,这里正方系统有个VIEWSTATE,需要即时提取出来,于是首先想到正则。
这个viewstate虽然经常变化,但前三位保持不变 于是想出了很水的一个正则 'dDw[^"]*' 呵呵 ,然后想了想,觉得还是练习下写正则吧,于是码出了'<input[^>]*name=\"__VIEWSTATE\"[^>]*value=\"([^"]*)\"[^>]*>'这样一个正则。
后来发现还可以使用sgmllib 直接提取html标签中的属性。很方便,详细使用就不给出了。
这里贴出登陆部分代码。
值得吐槽一点就是提交表单竟然还有‘ 登 陆 ’(有3个空格)这种货。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re,urllib,urllib2,cookielib
url = "http://ea.uestc.edu.cn/default_ldap.aspx"
login = urllib2.urlopen(url)
html = login.read()
login.close()
#viewstate= re.findall('dDw[^"]*',html,re.S)
viewstate= re.findall('<input[^>]*name=\"__VIEWSTATE\"[^>]*value=\"([^"]*)\"[^>]*>',html,re.S)
#cookie
cj = cookielib.CookieJar()
#school number and password
post_data = urllib.urlencode({'tbYHM': 'YOUR SCHOOL NUMBER',
'tbPSW': 'YOUR PASSWORD',
'Button1': ' 登 录 ',
'__VIEWSTATE':viewstate[0]}
)
#login url
path = 'http://ea.uestc.edu.cn/default_ldap.aspx'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Opera/9.23')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)
conn.close()
req2=urllib2.urlopen('http://ea.uestc.edu.cn/xs_main_zzjk.aspx?xh=YOUR SCHOOL NUMBER')
#get encode
encode=req2.headers['content-type'].split('charset=')[-1]
content=unicode(req2.read(),encode)
req2.close()
print content