模拟登陆一个12306网站,在模拟点击预定车票时,模拟请求检查是否登陆,结果显示未登陆,什么原因?
已经使用了,opener.open 来作为全局记住的cookie
#!/bin/env python
# -*- coding: utf-8 -*-
import urllib, urllib2
import ssl, cookielib, json, re
ssl._create_default_https_context = ssl._create_unverified_context
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'
}
def getcode():
print 'getcode cookie%s' % cj
req = urllib2.Request('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.9730617288073076')
req.headers = headers
response = opener.open(req)
print response.getcode()
# print response.read()
file = response.read()
with open('out.png', 'wb') as fn:
fn.write(file)
def login():
print 'login cookie%s' % cj
getcode()
print '请输入验证码:'
code = raw_input()
req = urllib2.Request('https://kyfw.12306.cn/passport/captcha/captcha-check')
req.headers = headers
data = {
'answer': code,
'login_site':'E',
'rand':'sjrand',
}
data = urllib.urlencode(data)
response = opener.open(req, data=data)
str1111 = response.read()
print str1111
result = json.loads(str1111)
print result
if result['result_code'] == '4':
print '开始登陆'
req_login = urllib2.Request('https://kyfw.12306.cn/passport/web/login')
req_login.headers = headers
from password import paw, username
data = {
'username': username,
'password': paw,
'appid': 'otn',
}
data = urllib.urlencode(data)
res_login = urllib2.urlopen(req_login, data=data)
print res_login.read()
else:
print '验证码校验失败'
login()
def queryTrain():
print 'queryTrain cookie%s' % cj
req = urllib2.Request('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-10-26&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=CDW&purpose_codes=ADULT')
req.headers = headers
response = opener.open(req)
result = response.read()
print type(result)
res_json = json.loads(result)
train_list = res_json['data']['result']
print type(train_list)
index = 0
for i in train_list:
t_list = i.split('|')
if t_list[28] == u'有':
print '有票'
global Train_info
Train_info = t_list
break
def checkUser():
print 'checkUser cookie%s' % cj
req1 = urllib2.Request('https://kyfw.12306.cn/otn/login/checkUser')
req1.headers = headers
req1.add_header('If-Modified-Since', '0')
res1 = opener.open(req1)
ret1 = res1.read()
print 'checkUser: %s' % ret1
return ret1
global Train_info
if __name__ == '__main__':
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
print 'cookie%s' % cj
Train_info = []
login()
queryTrain()
print Train_info
res = checkUser()
res = json.loads(res)
is_login = res['data']['flag']
print is_login, type(is_login)
if res['data']['flag']:
print '已登陆'
else:
print '未登陆'
|
|
|
|
|
共 0 个关于本帖的回复 最后回复于 2017-10-25 11:58