模拟登陆
2016-03-06 09:28
471 查看
# -*- coding: utf-8 -*- ''' Created on 2015年8月13日 @author: wwhhff11 ''' import urllib2 import urllib import gzip from StringIO import StringIO import chardet from lxml import etree import cookielib class TechLogin(object): 'construction' def __init__(self,username,password): self.username=username self.password=password self.loginUrl='https://ids-swust.fayea.com/cas/login' self.postHeader={ 'Host': 'ids-swust.fayea.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Referer': 'https://ids-swust.fayea.com/cas/login?service=https%3A%2F%2Fmatrix%2Edean%2Eswust%2Eedu%2Ecn%2FacadmicManager%2Findex%2Ecfm%3Fevent%3DstudentPortal%3ADEFAULT%5FEVENT', 'Connection': 'keep-alive' } 'login' def login(self): cj = cookielib.LWPCookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) postParam=self.getPostParam() request=urllib2.Request(self.loginUrl, postParam, self.postHeader) html=self.getHtmlContent(request,opener) try: self.realUrl=url=self.getNextUrl(html) html=self.getHtmlContent(url, opener) request=urllib2.Request('https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentProfile:courseMark',None,self.getHeader()) html=self.getHtmlContent(request, opener) print html print 'Login sucess!' except: print 'Login error!' return False return True 'get the param' def getPostParam(self): postParam={ 'lt': 'LT-82C85EEE-CEB9-3EF6-6EE1931298ED7D61', 'username': self.username, 'password': self.password, 'service': 'https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:DEFAULT_EVENT' } return urllib.urlencode(postParam) 'get the content of html' def getHtmlContent(self,request,opener): response = opener.open(request) 'gzip and no-gzip' if response.info().get('Content-Encoding') == 'gzip': buf = StringIO(response.read()) f = gzip.GzipFile(fileobj=buf) html = f.read() else: html = response.read() return self.transCharset(html) 'trans the charset' def transCharset(self,html): charset=chardet.detect(html) return html.decode(charset['encoding'],'ignore').encode('utf-8') 'get the real url' def getNextUrl(self,html): page=etree.HTML(html) hrefs=page.xpath(u'//a[@class="btn btn-primary"]') try: return hrefs[0].get("href") except Exception as e: return None; 'grade header' def getHeader(self): header={ 'Host': 'matrix.dean.swust.edu.cn', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Referer': self.realUrl, 'Connection': 'keep-alive' } return header if __name__ == '__main__': demo=TechLogin('xxxxxxxx','xxxxxx') demo.login()
相关文章推荐
- 算法练习-串的简单处理
- 二维数组的列排序
- UITableView
- android Butt 按钮单击事件的监听
- [视频]Win10 Mobile RedStone预览版磁贴动画演示:这就是淡入淡出
- CF #344 Div. 2
- HDU 3035 War 平面最小割+优先队列优化的dij
- 在web service间传递java bean
- Android ActionBar的基本用法(转自bigconvience)
- 磁盘、分区、文件系统
- Art of Unit Test :: Stubs
- mybatis--原始dao和代理Mapper
- ggplot2_散点图
- colorAccent,colorPrimary,colorPrimaryDark……来这里你就明白了
- Freemarker常用技巧
- Docker简介
- UIScrollView和MultiThreading、UITextField、Keyboard
- iOS之GCD再谈(dispatch_barrier_async)
- 选拔总结
- 消费者生产者