python登陆正方系统
发表于 2012-09-15 22:10:31
今天恰好帮同学研究如何模拟登陆上正方系统,制作查询信息的小工具
学校正方系统入口处无验证码,问题瞬间简单许多。
同学直接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