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

转载——Python模拟登录代码

时间:2016-01-18 00:33:09      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

Python版本3.5

# -*- coding: utf-8 -*-
import re;
import http.cookiejar;
import urllib.request, urllib.parse, urllib.error
import optparse;

#------------------------------------------------------------------------------
# check all cookies in cookiesDict is exist in cookieJar or not
def checkAllCookiesExist(cookieNameList, cookieJar) :
    cookiesDict = {};
    for eachCookieName in cookieNameList :
        cookiesDict[eachCookieName] = False;

    allCookieFound = True;
    for cookie in cookieJar :
        if(cookie.name in cookiesDict) :
            cookiesDict[cookie.name] = True;

    for eachCookie in cookiesDict.keys() :
        if(not cookiesDict[eachCookie]) :
            allCookieFound = False;
            break;

    return allCookieFound;

#------------------------------------------------------------------------------
# just for print delimiter
def printDelimiter():
    print(-*80)

#------------------------------------------------------------------------------
# main function to emulate login baidu
def emulateLoginBaidu():
    print("Function: Used to demostrate how to use Python code to emulate login baidu main page: http://www.baidu.com/")
    print("Usage: emulate_login_baidu_python.py -u yourBaiduUsername -p yourBaiduPassword")
    printDelimiter();

    # parse input parameters
    parser = optparse.OptionParser();
    parser.add_option("-u","--username",action="store",type="string",default=‘‘,dest="username",help="Your Baidu Username");
    parser.add_option("-p","--password",action="store",type="string",default=‘‘,dest="password",help="Your Baidu password");
    (options, args) = parser.parse_args();
    # export all options variables, then later variables can be used
    for i in dir(options):
        exec(i + " = options." + i);

    printDelimiter();
    print("[preparation] using cookieJar & HTTPCookieProcessor to automatically handle cookies")
    cj =http.cookiejar.CookieJar();
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj));
    urllib.request.install_opener(opener);

    printDelimiter();
    print("[step1] to get cookie BAIDUID")
    baiduMainUrl = "http://www.baidu.com/";
    resp = urllib.request.urlopen(baiduMainUrl);
    #respInfo = resp.info();
    #print "respInfo=",respInfo;
    for index, cookie in enumerate(cj):
        print([,index, ],cookie)

    printDelimiter();
    print("[step2] to get token value")
    getapiUrl = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true";
    getapiResp = urllib.request.urlopen(getapiUrl);
    #print "getapiResp=",getapiResp;
    getapiRespHtml = getapiResp.read().decode(utf-8);
    #print "getapiRespHtml=",getapiRespHtml;
    #bdPass.api.params.login_token=‘5ab690978812b0e7fbbe1bfc267b90b3‘;
    foundTokenVal = re.search("bdPass\.api\.params\.login_token=‘(?P<tokenVal>\w+)‘;", getapiRespHtml);
    if(foundTokenVal):
        tokenVal = foundTokenVal.group("tokenVal");
        print("tokenVal=",tokenVal)

        printDelimiter();
        print("[step3] emulate login baidu")
        staticpage = "http://www.baidu.com/cache/user/html/jump.html";
        baiduMainLoginUrl = "https://passport.baidu.com/v2/api/?login";
        postDict = {
            #‘ppui_logintime‘: "",
            charset       : "utf-8",
            #‘codestring‘    : "",
            token         : tokenVal, #de3dbf1e8596642fa2ddf2921cd6257f
            isPhone       : "false",
            index         : "0",
            #‘u‘             : "",
            #‘safeflg‘       : "0",
            staticpage    : staticpage, #http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html
            loginType     : "1",
            tpl           : "mn",
            callback      : "parent.bdPass.api.login._postCallback",
            username      : "603173405@qq.com",
            password      : "9279788280",
            #‘verifycode‘   : "",
            mem_pass      : "on",
        };
        postData = urllib.parse.urlencode(postDict).encode("utf-8");
        # here will automatically encode values of parameters
        # such as:
        # encode http://www.baidu.com/cache/user/html/jump.html into http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html
        #print "postData=",postData;
        req = urllib.request.Request(baiduMainLoginUrl, postData);
        # in most case, for do POST request, the content-type, is application/x-www-form-urlencoded
        req.add_header(Content-Type, "application/x-www-form-urlencoded");
        resp = urllib.request.urlopen(req);
        #for index, cookie in enumerate(cj):
        #    print ‘[‘,index, ‘]‘,cookie;
        cookiesToCheck = [BDUSS, PTOKEN, STOKEN, SAVEUSERID];
        loginBaiduOK = checkAllCookiesExist(cookiesToCheck, cj);
        if(loginBaiduOK):
            print("+++ Emulate login baidu is OK, ^_^")
        else:
            print("--- Failed to emulate login baidu !")
    else:
        print("Fail to extract token value from html=",getapiRespHtml)

if __name__=="__main__":
    emulateLoginBaidu();

 

转载——Python模拟登录代码

标签:

原文地址:http://www.cnblogs.com/xiaomen/p/5138067.html

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