大家都知道 12306网站是买火车票的! 特别是到了节假日的时候 一票难求 非常的难买, 所以小编写了个Python 模拟登陆12306的网站!

现在12306的网站 改版变化也挺大的! 不过都是美工的功劳  哈哈!

后台其他的一些数据 变化基本不大!

首先我们来分析下网站 , 12306网站难的地方 就是验证码那块    所以处理验证码的时候 需要下点功夫!

看来应该是用了base64编码了图片 我们只需要转码恢复成图片下载到本地 就好了! 用  import base64

效验验证码 我们通过坐标转化成数字 变成序号 方便我们选择  反正就8个图片 也就是8个序号了!

好了 废话不多说了 直接上代码吧:# -*- coding:utf-8 -*-

"""12306登陆"""

import requests

import base64

import re

def get_point(index):

map = {

'1': '37,46',

'2': '110,46',

'3': '181,46',

'4': '253,46',

'5': '37,116',

'6': '110,116',

'7': '181,116',

'8': '253,116',

}

index = index.split(',')

temp = []

for item in index:

temp.append(map[item])

return ','.join(temp)

# 实例化一个Session

session = requests.Session()  # 自动的处理cookie

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'

}

session.headers.update(headers)

# 伪装成浏览器

# 1. 访问 获取cookie

cookie_url = 'https://kyfw.12306.cn/otn/login/conf'

response = session.get(cookie_url)

# 2. 下载验证码

captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&1541686714134&callback=jQuery19109992892609908492_1541686371355&_=1541686371356'

response = session.get(captcha_url)

data = response.text

img_base64 = re.findall(r'"image":"(.*?)"', data)[0]

# img_base64 = 'data:image/jpg;base64,' + img_base64

# 转换成二级制数据

img_bytes = base64.b64decode(img_base64)

# 写到文件

with open('captcha.jpg', 'wb') as f:

f.write(img_bytes)

# 3校验验证码

check_captcha = 'https://kyfw.12306.cn/passport/captcha/captcha-check?callback=jQuery19109992892609908492_1541686371355&rand=sjrand&login_site=E&_=1541686371358'

response = session.get(check_captcha, params={'answer': get_point(

input('请输入正确的序号>>>:'))})  # 验证码输入,请输入正确验证码的序号(不是坐标),序号之间以,号隔开,验证码在程序目录下

res = response.text

code = re.findall(r'"result_code":"(.*?)"', res)[0]

if code == '4':

print('验证码校验成功')

# 4 校验用户名密码

login_url = 'https://kyfw.12306.cn/passport/web/login'

form_data = {

'username': '12306账号',  # 替换成自己的12306账号

'password': '12306密码',  # 替换成自己的12306密码

'appid': 'otn'

}

response = session.post(login_url, data=form_data)

res = response.json()

if res["result_code"] == 0:

print('用户名密码校验成功!')

# 5获取权限token

uamtk_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk'

response = session.post(uamtk_url, data={'appid': 'otn'})

res = response.json()

if res["result_code"] == 0:

print('获取token成功')

# 6.校验 token

check_token_url = 'https://kyfw.12306.cn/otn/uamauthclient'

response = session.post(check_token_url, data={

'tk': res['newapptk']})

print(response.text)

python模拟火车订票系统_Python-模拟火车票12306网站登陆相关推荐

  1. 【Python】【项目模拟】模拟火车订票系统

    本项目代码基于python大作业--列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实.项目总体仍较为粗糙,后面还需继续完善. 部分项目界面 ...

  2. 模拟火车订票系统(Python)

    模拟火车订票系统,效果显示,输入购买的车次,乘车人,判断车次是否存在,及其行程信息.如下效果图: 程序如下: 输出结果: 总结:难点在于1.使用自建函数判断车次是否存在 2.字符串format方法的使 ...

  3. 实战二、模拟火车订票系统

    实战二.模拟火车订票系统 详细编程要求如下: 应用到的知识点 1)访问列表元素: print(listname[n]) 2)通过键值访问字典: print(dictionary["键值&qu ...

  4. python模拟火车订票系统代码_Python3.6实现12306火车票自动抢票,附源码

    原标题:Python3.6实现12306火车票自动抢票,附源码 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已 ...

  5. python票务系统_python基础学习:模拟火车订票系统

    2020-12-20 str1 = ["车次", "出发站-到达站", "出发时间", "到达时间", "历时 ...

  6. python模拟火车订票系统_如何用python编写火车抢票助手

    前几天跟朋友说打算写一个抢票助手,最后由于某些原因念头打消了. 可就在昨天晚上,才隐约记起一年前的自己曾经说过:一年后我一定要写一个12306的抢票助手!瞬间激情澎湃,甚至已经是快临近凌晨时便开始动工 ...

  7. 利用python模拟火车订票系统

    title = ['车次 ','出发站-到达站 ','出发时间 ','到达时间 ','历时 '] num = ['T40','T298','Z158','Z62'] place = ['长春-北京', ...

  8. python 模拟飞机订票系统

    本文包括以下内容 模拟订票系统的各个模块说明 运行截图 可能出现的Bug 解决方案 模拟订票系统需要有以下几个部分组成 一.添加飞机信息 二.删除飞机信息 三.航班信息查询 四.航班信息显示 五.修改 ...

  9. 火车时刻表C语言报告,终稿火车订票系统的设计与实现课程设计.doc最终版(范文1)...

    <火车订票系统的设计与实现课程设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)火车订票系统的设计与实现课程设计.doc(最终版)>相关文档资源请在帮帮文库(www ...

  10. java编写火车订票系统_毕业设计(论文)-基于JavaWeb技术的火车订票系统.doc

    本科生毕业设计 题 目 基于JavaWeb技术的火车订票系统 姓 名 学 号 院 系 专 业 信息与计算科学 指导教师 20 年 月 教务处制 本科生毕业设计声明 本人郑重声明:所呈交的毕业设计,是本 ...

最新文章

  1. Android10.0 Binder通信原理(七)-Framework binder示例
  2. Oracle业务适合用PostgreSQL去O的一些评判标准
  3. 微信转账一次显示两个_微信为啥分红包和转账两大功能?这4个区别你要知道,望相互转告...
  4. Class的 getSuperclass与getGenericSuperclass区别
  5. shell高级-----正则表达式
  6. LUOGU P4016 负载平衡问题
  7. ****阿里云使用+快速运维总结(不断更新)
  8. matlab中emd函数,EMD算法的matlab程序介绍解析
  9. php fseek函数,C++_详解C语言中fseek函数和ftell函数的使用方法,fseek函数:int fseek(FILE * _ - phpStudy...
  10. 单片机c语言中断程序实验报告,单片机实验之外部中断应用实验
  11. 超高精度时间频率同步及其应用
  12. 异贝5G新零售工具,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案的推送。
  13. 资源Resource的介绍
  14. drill apache_Apache Spark与Apache Drill
  15. 但见新人笑,那闻旧人哭,大衣哥前儿媳陈亚楠好可怜
  16. 来自CSDN或其它的精华网址
  17. 为什么NFT在加密货币的文艺复兴中不可或缺?
  18. 用AForge将普通视频转换为带运动检测效果的视频
  19. 如何使用CSS3来获取屏幕宽度并且用来计算DIV高度
  20. html的flash播放器代码,收藏漂亮的flash、各色播放器、以及html代码

热门文章

  1. android自动秒杀脚本,京东自动秒杀脚本手机版-京东自动秒杀脚本安卓版下载v7.0.4 - 7230手游网...
  2. 智能和弦生成工具-Plugin Boutique Scaler 2 v2.3.1 WiN-MAC
  3. 农夫安全-安全网站导航 farmsec
  4. JS模拟百度文库评分
  5. 《加密与解密》笔记五(二)
  6. 第四章网页文字编排设计
  7. QQ和360大战的这场戏我的看法
  8. 使用 HTML、CSS 和 JS 的简单倒数计时器
  9. 最长等差数列 leetcode java_51nod1055 最长等差数列
  10. 仿秒拍视频网UI主题模板+Emlog内核开发