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随机生成数模块random使用实例
Apr 13 Python
探究python中open函数的使用
Mar 01 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python绘制条形图方法代码详解
Dec 19 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
对python周期性定时器的示例详解
Feb 19 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python爬虫之urllib基础用法教程
Oct 12 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
python实现简单的五子棋游戏
Sep 01 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 Mysql日期和时间函数集合
2007/11/16 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
JS如何设置元素样式的方法示例
2017/08/28 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python正则表达式和元字符详解
2018/11/29 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
个人求职简历中英文自我评价
2013/12/16 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
Python中request的基本使用解决乱码问题
2022/04/12 Python