您的位置:首页 > 其它

模拟登陆

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: