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 相关文章推荐
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python中的zip函数使用示例
Jan 29 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
利用Django-environ如何区分不同环境
Aug 26 Python
超简单使用Python换脸实例
Mar 27 Python
python替换字符串中的子串图文步骤
Jun 19 Python
windows下Python安装、使用教程和Notepad++的使用教程
Oct 06 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Python线程指南分享
2019/11/19 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
用python实现名片管理系统
2020/06/18 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
毕业生教师求职信
2013/10/20 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
余世维讲座观后感
2015/06/11 职场文书
教学副校长工作总结
2015/08/13 职场文书
商业计划书范文
2019/04/24 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python