import re
import cookielib
import urllib
import urllib2
import optparse
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
def printDelimiter():
print '-'*80
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()
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='username',help='Your Baidu Password')
(options,args)=parser.parse_args()
for i in dir(options):
exec(i+'=options.'+i)
printDelimiter()
print '[preparation] using cookiejar & HTTPCookieProcessor to antomatically 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)
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)
getapiRespHtml=getapiResp.read()
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='http://passport.baidu.com/v2/api/?login'
postDict={
'charset':'utf-8',
'token':tokenVal,
'isPhone':'false',
'index':'0',
'staticpage':staticpage,
'loginType':'1',
'tpl':'mn',
'callback':'parent.bdPass.api.login._postCallback',
'username':'332541940@qq.com',
'password':'jing3701139',
'mem_pass':'on',
}
postData=urllib.urlencode(postDict)
req=urllib2.Request(baiduMainLoginUrl,postData)
req.add_header('Content-Type','application/x-www-form-urlencoded')
resq=urllib2.urlopen(req)
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()