Python模拟登录12306的方法
本文实例讲述了Python模拟登录12306的方法。分享给大家供大家参考。
具体实现方法如下:
#!/usr/bin/python #-*-coding:utf-8-*- importre; importsys; importcookielib; importurllib; importurllib2; importoptparse; importjson; importhttplib2;
reload(sys) sys.setdefaultencoding('utf8');
defLogin(): cj=cookielib.CookieJar(); opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)); urllib2.install_opener(opener); print"--------------[step1]togetcookie"; Url="https://kyfw.12306.cn/otn/login/init"; resp=urllib2.urlopen(Url); forindex,cookieinenumerate(cj): print'[',index,']',cookie;
print"--------------[step2]togetcode"; Url2="https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand"; resp2=urllib2.urlopen(Url2);
#respInfo2=resp2.info(); #print"respInfo=",respInfo2;
withopen("code.png","wb")asimage: image.write(resp2.read()) codeStr=sys.stdin.readline(); codeStr=codeStr[:-1] print"--------------[step3]tocheckcode"; ajax_url="https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn"; dc={ 'randCode' : codeStr, 'rand' :"sjrand" }; request=urllib2.Request(ajax_url,urllib.urlencode(dc)) request.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8") request.add_header('X-Requested-With','XMLHttpRequest') request.add_header('User-Agent','Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/33.0.1750.154Safari/537.36') request.add_header('Referer','https://kyfw.12306.cn/otn/login/init') request.add_header('Accept','*/*') request.add_header('Accept-Encoding','gzip,deflate')
f=urllib2.urlopen(request) print(f.read())
print"--------------[step4]tologin"; LoginUrl="http://kyfw.12306.cn/otn/login/loginAysnSuggest"; dc={ 'randCode' : codeStr, 'userDTO.password' :"sunyuke1989", 'loginUserDTO.user_name':"sunyuke@qq.com" }; req=urllib2.Request(LoginUrl,urllib.urlencode(dc)); req.add_header('Content-Type',"application/x-www-form-urlencoded"); req.add_header('X-Requested-With','XMLHttpRequest'); req.add_header('Origin','https://kyfw.12306.cn'); req.add_header('Referer','https://kyfw.12306.cn/otn/login/init'); req.add_header('Accept','*/*'); req.add_header('Accept-Encoding','gzip,deflate'); req.add_header('Connection','keep-live'); request.add_header('User-Agent','Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/33.0.1750.154Safari/537.36') resp=urllib2.urlopen(req); print(resp.read().encode('gb18030'));
LoginingUrl="https://kyfw.12306.cn/otn/login/userLogin"; req=urllib2.Request(LoginingUrl,"");
print"--------------[step5]toQueryUserInfo"; LoginingUrl="https://kyfw.12306.cn/otn/modifyUser/initQueryUserInfo"; req=urllib2.Request(LoginingUrl,""); resp=urllib2.urlopen(req); info=resp.read(); print(resp.read().encode('gb18030'));
if__name__=="__main__": Login();