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 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
Python实现Pig Latin小游戏实例代码
Feb 02 Python
对python3 urllib包与http包的使用详解
May 10 Python
基于Python List的赋值方法
Jun 23 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
python自动化办公操作PPT的实现
Feb 05 Python
python 使用openpyxl读取excel数据
Feb 18 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代码优化及php相关问题总结
2006/10/09 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
js 学习笔记(三)
2009/12/29 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python中for循环详解
2014/01/17 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
python中rb含义理解
2020/06/18 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
建筑工程自我鉴定
2013/10/18 职场文书
拉丁舞学习者的自我评价
2013/10/27 职场文书
酒店出纳岗位职责
2013/12/29 职场文书
实习单位接收函
2014/01/11 职场文书
西式结婚主持词
2014/03/14 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
python实现层次聚类的方法
2021/11/01 Python
Python中的 Set 与 dict
2022/03/13 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
mysql序号rownum行号实现方式
2022/12/24 MySQL