Python模拟登录12306的方法


Posted in Python onDecember 30, 2014

本文实例讲述了Python模拟登录12306的方法。分享给大家供大家参考。

具体实现方法如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

 

import re;

import sys;

import cookielib;

import urllib;

import urllib2;

import optparse;

import json;

import httplib2;
reload(sys)

sys.setdefaultencoding('utf8');
def Login():

 

    cj = cookielib.CookieJar();

    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));

    urllib2.install_opener(opener);

 

    print "--------------[step1] to get cookie";

    Url = "https://kyfw.12306.cn/otn/login/init";

    resp = urllib2.urlopen(Url);

    for index, cookie in enumerate(cj):

        print '[',index, ']',cookie;
     

    print "--------------[step2] to get code";

    Url2 = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand";

    resp2 = urllib2.urlopen(Url2);
    #respInfo2 = resp2.info();

    #print "respInfo=",respInfo2;
    with open("code.png", "wb") as image:

        image.write(resp2.read())

        

    codeStr = sys.stdin.readline();

    codeStr = codeStr[:-1]

    

    print "--------------[step3] to check code";

    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 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/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] to login";

    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 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/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] to QueryUserInfo";

    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();

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
wxpython实现图书管理系统
Mar 12 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python判断数字是否是超级素数幂
Sep 27 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
python挖矿算力测试程序详解
Jul 03 Python
利用Python检测URL状态
Jul 31 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
python 装饰器的基本使用
Jan 13 Python
python爬虫如何解决图片验证码
Feb 14 Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
利用Psyco提升Python运行速度
Dec 24 #Python
Python解决鸡兔同笼问题的方法
Dec 20 #Python
Python列表计数及插入实例
Dec 17 #Python
You might like
php curl 获取https请求的2种方法
2015/04/27 PHP
php生成二维码
2015/08/10 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
从0开始学Vue
2016/10/27 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Python线程threading模块用法详解
2020/02/26 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
解决python对齐错误的方法
2020/07/16 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
UNIX文件类型
2013/08/29 面试题
小学校园之星事迹材料
2014/05/16 职场文书
2014企业年终工作总结
2014/12/23 职场文书
学校教学工作总结2015
2015/05/19 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫