码迷,mamicode.com
首页 > 编程语言 > 详细

Python模拟登陆2:获取电子科大研究生成绩

时间:2015-01-11 01:01:11      阅读:429      评论:0      收藏:0      [点我收藏+]

标签:

前面小试了一把 能够成功登陆,但是这下要获取成绩可是废了好多功夫。首先他这个登陆只是登陆了一个frame框架页面,里面还有个js的二次跳转页面。还会自动登陆一次。只有在IE或者谷歌等http抓包才看的出来隐藏的地址。 开始以为很简单 直接在第二个登陆页面提交post 谁知道 他会自动跳转到第一个登陆页面 前端白痴的我有点乱入了。 最后试来试去, 偷偷去看了下cookies ,尝试性的直接提交了cookies想不到 成功了。 但是这个cookies是在成绩页面 不知道是request还是response的。 然后看了下 发现在第一个登陆的时候会生成一个cookies 带着这个cookies进入第二个登陆界面的时候 又会生成一个cookies 这个cookies直接就作为header提交进去,居然获得了成绩。 很是惊喜,因为第一次做这种东西 忙疼了一晚上, 第一次用cookies也是醉了。 可能有很简单的方法我没发现,比较太菜了,反正现在方法是实现了。 就主要是把这个cookies获取到就行了。然后脑补了一下python的字符串赋值 还有if的用法,,,原谅我刚学几天python。按其他语言的思维边猜边百度 还是写出来了。方法比较简单。

python有个cookies存储的方法,然后再登陆完后 获取特定的2个字段 再带入第二次获取成绩。 这两个字段是从一大堆cookie分析出来的,说白了就是一个一个试排除法。最终代码如下 。P掉了 用户名密码 用username password代替

#coding:utf-8
import re
import urllib
import urllib2
import cookielib
import os
import json
import sys
import time
from urllib import quote,unquote
from urllib2 import HTTPError
from urllib2 import URLError

username='XXXX'
password='XXXX'
#登陆模块
def Login():
    
        cj = cookielib.CookieJar();
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
        urllib2.install_opener(opener); 
        
        #打开获得 cookie
        info_URL = "http://portal.uestc.edu.cn/index.portal"
        info_Login_URL = "https://uis.uestc.edu.cn/amserver/UI/Login";     
        info_URL_Grade="http://gs.uestc.edu.cn/epstar/app/template.jsp?mainobj=YJSXT/PYGL/CJGLST/V_PYGL_CJGL_KSCJHZB&tfile=KSCJHZB_CJCX_CD/KSCJHZB_XSCX_CD_BD&filter=V_PYGL_CJGL_KSCJHZB:WID='665h4kg-bflb7s-hwsj36d3-1-hx7epplv-5w9'"       
        info_URL_Grade_Frame="http://gs.uestc.edu.cn/epstar/app/template.jsp?mainobj=YJSXT/CJGLST/V_PYGL_CJGL_KSCJHZB&tfile=KSCJHZB_CJCX_CD/KSCJHZB_XSCX_CD_KJ¤t.model.id=665h4kf-ntmygk-fep2jgjw-1-fepbsyak-5w"
        infoOPEN = urllib2.urlopen(info_URL)
        #生成要发送的数据
        LoginData = {
            'IDToken0':'',
            'IDToken1':username,
            'IDToken2':password,
            'IDButton':'Submit',
            'goto':'aHR0cDovL3BvcnRhbC51ZXN0Yy5lZHUuY24vbG9naW4ucG9ydGFs',
            'encoded':'true',
            'gx_charset':'UTF-8',
            }; 
            
        #把发送数据转换格式
        LoginData = urllib.urlencode(LoginData);    
        
        #生成请求数据
        info_Login_Request = urllib2.Request(info_Login_URL, LoginData);
        
        #添加数据头部
        info_Login_Request.add_header('Content-Type', "application/x-www-form-urlencoded");
        info_Login_Request.add_header('User-Agent', "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36");

        #发送请求,尝试登陆
        info_Login_Open = urllib2.urlopen(info_Login_Request);

        info_Login_Open2 = urllib2.urlopen(info_URL_Grade_Frame);
        cookies=''
        new=1
        for cookie in cj:
            if cookie.name=='iPlanetDirectoryPro':
                #print cookie.name,cookie.value
                cookies+=cookie.name+'='+cookie.value+';'
            if cookie.name=='JSESSIONID' and new ==1:
                new =0
                #print cookie.name,cookie.value
                cookies+=cookie.name+'='+cookie.value+';'
        print cookies
        #验证登陆是否成功
        request = urllib2.Request(
        url     = info_URL_Grade,
        headers = {'Cookie' :cookies},
        )
        tt = urllib2.urlopen(request).read()
        print tt
        fout=open("tt.html","w")
        fout.write(tt)
        print 'success!'
   

if __name__ == "__main__" :
    Login()

图就不上了,自己可以试试

Python模拟登陆2:获取电子科大研究生成绩

标签:

原文地址:http://blog.csdn.net/cq361106306/article/details/42592783

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!