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中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
django session完成状态保持的方法
Nov 27 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
Python WSGI 规范简介
Apr 11 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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 4.2书写安全的脚本
2006/10/09 PHP
PHP里的中文变量说明
2011/07/23 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
javascript 面向对象 function类
2010/05/13 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python实现数字炸弹游戏
2020/07/17 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
别名指示符是什么
2012/10/08 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
大学生助学金感谢信
2015/01/21 职场文书
技术员岗位职责
2015/02/04 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang