Python模拟登陆大连交通大学教务在线,使用wxPython做的界面,urllib2发送数据,可以实现登陆后获取首页登陆数据的功能,目前只做登陆,其他的暂时没做
Python2.7代码
# -*- coding: UTF-8 -*- import wx import httplib2 import cStringIO import urllib import random class ExamplePanel(wx.Panel): __h = httplib2.Http() __headers = {'Cookie': ''} def __init__(self, parent): wx.Panel.__init__(self, parent) self.jwtitle = wx.StaticText(self, label=u"大连交通大学教务在线模拟登陆", pos=(20,30)) self.lblname = wx.StaticText(self, label=u"用户名:", pos=(20,60)) self.editname = wx.TextCtrl(self, value="", pos=(100, 60), size=(140,-1)) self.lblpass = wx.StaticText(self, label=u"密 码:", pos=(20,90)) self.editpass = wx.TextCtrl(self, value="", pos=(100, 90), size=(140,-1), style=wx.TE_PASSWORD) self.lblchpt = wx.StaticText(self, label=u"验证码:", pos=(20,120)) self.editchtp = wx.TextCtrl(self, value="", pos=(100, 120), size=(140,-1)) #加载验证码图片 url = 'http://jw.djtu.edu.cn/academic/common/security/login.jsp?' resp, content = self.__h.request(url) cookiestr = resp['set-cookie'].split('; ')[0] # 响应的cookie多了路径path print cookiestr self.__headers={'Cookie': cookiestr} url = 'http://jw.djtu.edu.cn/academic/getCaptcha.do' print url resp, content = self.__h.request(url, 'GET',headers=self.__headers) stream = cStringIO.StringIO(content) bmp = wx.BitmapFromImage( wx.ImageFromStream(stream)) self.sbmp = wx.StaticBitmap(self, -1, bmp, (20, 150)) #刷新验证码按钮 self.btnref =wx.Button(self, label=u"刷新验证码", pos=(150, 150)) self.btnsub =wx.Button(self, label=u"提 交", pos=(150, 200)) self.Bind(wx.EVT_BUTTON, self.OnClickRefresh,self.btnref) self.Bind(wx.EVT_BUTTON, self.OnClickSubmint,self.btnsub) def OnClickRefresh(self,event): print 'clickRefresh' url = 'http://jw.djtu.edu.cn/academic/getCaptcha.do?'+str(random.random()) print url resp, content = self.__h.request(url, 'GET',headers=self.__headers) stream = cStringIO.StringIO(content) bmp = wx.BitmapFromImage( wx.ImageFromStream(stream)) self.sbmp=wx.StaticBitmap(self, -1, bmp, (20, 150)) def OnClickSubmint(self,event): print 'clickSubmint' # 必须编码成网页表单提交,不能直接作为POST的数据域提交 body = {'groupId': '', 'j_username': self.editname.GetValue(), 'j_password': self.editpass.GetValue(), 'j_captcha': self.editchtp.GetValue()} postheaders = self.__headers postheaders['Content-type']='application/x-www-form-urlencoded' url = 'http://jw.djtu.edu.cn/academic/j_acegi_security_check' resp, content = self.__h.request(url, 'POST', headers=postheaders, body=urllib.urlencode(body)) print resp #这个响应是重定向304 redirecurl = resp['location'] # 登陆之后会重定向 resp, content = self.__h.request(redirecurl, 'GET', headers=self.__headers) print resp charset=resp['content-type'].split('charset=')[-1] # 提取字符编码 print content.decode(charset).encode('utf-8') url = 'http://jw.djtu.edu.cn/academic/showHeader.do' resp, content = self.__h.request(url, 'GET', headers=self.__headers) print resp charset = resp['content-type'].split('charset=')[-1] print content.decode(charset).encode('utf-8') app = wx.App(False) frame = wx.Frame(None) panel = ExamplePanel(frame) frame.Show() app.MainLoop()
点击登陆之后,登陆之后的相关网页信息会输出到控制台