模拟登陆一个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

您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • Gephi社会网络分析-马蜂窝游记文本分词并同
  • Gephi社会网络分析-基于马蜂窝游记文本以词
  • 知乎话题文本根据词语间距筛选后生成共词矩
  • 马蜂窝游记文本分词后以词语间距为筛选条件
  • 学习使用apriori算法挖掘关联关系

热门用户

GMT+8, 2024-5-6 20:52