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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
用Django写天气预报查询网站
Oct 21 Python
python微信好友数据分析详解
Nov 19 Python
Python函数返回不定数量的值方法
Jan 22 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
Python基于gevent实现高并发代码实例
May 15 Python
Python过滤序列元素的方法
Jul 31 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php控制文件下载速度的方法
2015/03/24 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python2.7安装图文教程
2018/03/13 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Python实现自动访问网页的例子
2020/02/21 Python
Linux的主要特性
2014/10/06 面试题
学习十八大报告感言
2014/02/28 职场文书
个人四风对照检查材料
2014/09/26 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
公司市场部岗位职责
2015/04/15 职场文书
管理失职检讨书范文
2015/05/05 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL