最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

使用python模拟登陆百度

来源:动视网 责编:小采 时间:2020-11-27 14:28:31
文档

使用python模拟登陆百度

使用python模拟登陆百度:使用python模拟登陆百度#!/usr/bin/python # -*- coding: utf-8 -*- import re; import cookielib; import urllib; import urllib2; import optparse; #------------------------------------------
推荐度:
导读使用python模拟登陆百度:使用python模拟登陆百度#!/usr/bin/python # -*- coding: utf-8 -*- import re; import cookielib; import urllib; import urllib2; import optparse; #------------------------------------------


使用python模拟登陆百度

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import re;
import cookielib;
import urllib;
import urllib2;
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 = cookielib.CookieJar();
 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
 urllib2.install_opener(opener);
 
 printDelimiter();
 print "[step1] to get cookie BAIDUID";
 baiduMainUrl = "http://www.baidu.com/";
 resp = urllib2.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 = urllib2.urlopen(getapiUrl);
 #print "getapiResp=",getapiResp;
 getapiRespHtml = getapiResp.read();
 #print "getapiRespHtml=",getapiRespHtml;
 #bdPass.api.params.login_token='5ab690978812b0e7fbbe1bfc267b90b3';
 foundTokenVal = re.search("bdPass.api.params.login_token='(?Pw+)';", 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, #de3dbf1e85962fa2ddf2921cd6257f
 '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' : username,
 'password' : password,
 #'verifycode' : "",
 'mem_pass' : "on",
 };
 postData = urllib.urlencode(postDict);
 # 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 = urllib2.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 = urllib2.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模拟登陆百度

使用python模拟登陆百度:使用python模拟登陆百度#!/usr/bin/python # -*- coding: utf-8 -*- import re; import cookielib; import urllib; import urllib2; import optparse; #------------------------------------------
推荐度:
标签: 登录 百度 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top