python模拟火车订票系统_Python-模拟火车票12306网站登陆
大家都知道 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网站登陆相关推荐
- 【Python】【项目模拟】模拟火车订票系统
本项目代码基于python大作业--列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实.项目总体仍较为粗糙,后面还需继续完善. 部分项目界面 ...
- 模拟火车订票系统(Python)
模拟火车订票系统,效果显示,输入购买的车次,乘车人,判断车次是否存在,及其行程信息.如下效果图: 程序如下: 输出结果: 总结:难点在于1.使用自建函数判断车次是否存在 2.字符串format方法的使 ...
- 实战二、模拟火车订票系统
实战二.模拟火车订票系统 详细编程要求如下: 应用到的知识点 1)访问列表元素: print(listname[n]) 2)通过键值访问字典: print(dictionary["键值&qu ...
- python模拟火车订票系统代码_Python3.6实现12306火车票自动抢票,附源码
原标题:Python3.6实现12306火车票自动抢票,附源码 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已 ...
- python票务系统_python基础学习:模拟火车订票系统
2020-12-20 str1 = ["车次", "出发站-到达站", "出发时间", "到达时间", "历时 ...
- python模拟火车订票系统_如何用python编写火车抢票助手
前几天跟朋友说打算写一个抢票助手,最后由于某些原因念头打消了. 可就在昨天晚上,才隐约记起一年前的自己曾经说过:一年后我一定要写一个12306的抢票助手!瞬间激情澎湃,甚至已经是快临近凌晨时便开始动工 ...
- 利用python模拟火车订票系统
title = ['车次 ','出发站-到达站 ','出发时间 ','到达时间 ','历时 '] num = ['T40','T298','Z158','Z62'] place = ['长春-北京', ...
- python 模拟飞机订票系统
本文包括以下内容 模拟订票系统的各个模块说明 运行截图 可能出现的Bug 解决方案 模拟订票系统需要有以下几个部分组成 一.添加飞机信息 二.删除飞机信息 三.航班信息查询 四.航班信息显示 五.修改 ...
- 火车时刻表C语言报告,终稿火车订票系统的设计与实现课程设计.doc最终版(范文1)...
<火车订票系统的设计与实现课程设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)火车订票系统的设计与实现课程设计.doc(最终版)>相关文档资源请在帮帮文库(www ...
- java编写火车订票系统_毕业设计(论文)-基于JavaWeb技术的火车订票系统.doc
本科生毕业设计 题 目 基于JavaWeb技术的火车订票系统 姓 名 学 号 院 系 专 业 信息与计算科学 指导教师 20 年 月 教务处制 本科生毕业设计声明 本人郑重声明:所呈交的毕业设计,是本 ...
最新文章
- Android10.0 Binder通信原理(七)-Framework binder示例
- Oracle业务适合用PostgreSQL去O的一些评判标准
- 微信转账一次显示两个_微信为啥分红包和转账两大功能?这4个区别你要知道,望相互转告...
- Class的 getSuperclass与getGenericSuperclass区别
- shell高级-----正则表达式
- LUOGU P4016 负载平衡问题
- ****阿里云使用+快速运维总结(不断更新)
- matlab中emd函数,EMD算法的matlab程序介绍解析
- php fseek函数,C++_详解C语言中fseek函数和ftell函数的使用方法,fseek函数:int fseek(FILE * _ - phpStudy...
- 单片机c语言中断程序实验报告,单片机实验之外部中断应用实验
- 超高精度时间频率同步及其应用
- 异贝5G新零售工具,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案的推送。
- 资源Resource的介绍
- drill apache_Apache Spark与Apache Drill
- 但见新人笑,那闻旧人哭,大衣哥前儿媳陈亚楠好可怜
- 来自CSDN或其它的精华网址
- 为什么NFT在加密货币的文艺复兴中不可或缺?
- 用AForge将普通视频转换为带运动检测效果的视频
- 如何使用CSS3来获取屏幕宽度并且用来计算DIV高度
- html的flash播放器代码,收藏漂亮的flash、各色播放器、以及html代码
热门文章
- android自动秒杀脚本,京东自动秒杀脚本手机版-京东自动秒杀脚本安卓版下载v7.0.4 - 7230手游网...
- 智能和弦生成工具-Plugin Boutique Scaler 2 v2.3.1 WiN-MAC
- 农夫安全-安全网站导航 farmsec
- JS模拟百度文库评分
- 《加密与解密》笔记五(二)
- 第四章网页文字编排设计
- QQ和360大战的这场戏我的看法
- 使用 HTML、CSS 和 JS 的简单倒数计时器
- 最长等差数列 leetcode java_51nod1055 最长等差数列
- 仿秒拍视频网UI主题模板+Emlog内核开发