Python模拟登录12306的方法
admin
2023-07-31 02:10:26
0

本文实例讲述了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程序设计有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...