########################################################
# Python学习交流群:548377875
#源码+微信:mmp9972
# 火车票抢票系统V1.0
########################################################
import requests
import Station_Parse
import threading
import os
from datetime import datetime
from splinter.browser import Browser
from time import sleep
from tkinter import *
from PIL import Image, ImageTk
from tkinter import messagebox
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 忽视该警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 车票查询部分
#-------------------------------------------------------------------------------------------------------------------------------------------
# 数据处理+显示
class Trains_Demo():
# 初始化
def __init__(self, txt_show_ticket, raw_trains, option):
self.headers = '车次: 车站: 时间: 历时: 商务/特等座: 一等座: 二等座: 高级软卧: 软卧: 动卧: 硬卧: 软座: 硬座: 无座:'.split()
self.raw_trains = raw_trains
self.option = option
txt_show_ticket.delete(1.0, END)
# 获取出发和到达站
def get_from_to_station_name(self, data_list):
self.from_station_name = data_list[6]
self.to_station_name = data_list[7]
self.from_to_station_name = Station_Parse.parse_station().disparse(self.from_station_name) + '-->' + Station_Parse.parse_station().disparse(self.to_station_name)
return self.from_to_station_name
# 获得出发和到达时间
def get_start_arrive_time(self, data_list):
self.start_arrive_time = data_list[8] + '-->' + data_list[9]
return self.start_arrive_time
# 解析trains数据(与headers依次对应)
def parse_trains_data(self, data_list):
return {
'trips': data_list[3],
'from_to_station_name': self.get_from_to_station_name(data_list),
'start_arrive_time': self.get_start_arrive_time(data_list),
'duration': data_list[10],
'business_premier_seat': data_list[32] or '--',
'first_class_seat': data_list[31] or '--',
'second_class_seat': data_list[30] or '--',
'senior_soft_sleep': data_list[21] or '--',
'soft_sleep': data_list[23] or '--',
'move_sleep': data_list[33] or '--',
'hard_sleep': data_list[28] or '--',
'soft_seat': data_list[24] or '--',
'hard_seat': data_list[29] or '--',
'no_seat': data_list[26] or '--',
}
# 判断是否需要显示
def need_show(self, data_list):
self.trips = data_list[3]
initial = self.trips[0].lower()
if 'a' in self.option:
return self.trips
else:
return(initial in self.option)
# 数据显示
def show_trian_data(self):
self.t_num = 0
for self.train in self.raw_trains:
self.data_list = self.train.split('|')
if self.need_show(self.data_list):
self.values_row = []
self.parsed_train_data = self.parse_trains_data(self.data_list)
self.values_row.append(self.headers[0] + self.parsed_train_data['trips'])
self.values_row.append(self.headers[1] + self.parsed_train_data['from_to_station_name'])
self.values_row.append(self.headers[2] + self.parsed_train_data['start_arrive_time'])
self.values_row.append(self.headers[3] + self.parsed_train_data['duration'])
self.values_row.append(self.headers[4] + self.parsed_train_data['business_premier_seat'])
self.values_row.append(self.headers[5] + self.parsed_train_data['first_class_seat'])
self.values_row.append(self.headers[6] + self.parsed_train_data['second_class_seat'])
self.values_row.append(self.headers[7] + self.parsed_train_data['senior_soft_sleep'])
self.values_row.append(self.headers[8] + self.parsed_train_data['soft_sleep'])
self.values_row.append(self.headers[9] + self.parsed_train_data['move_sleep'])
self.values_row.append(self.headers[10] + self.parsed_train_data['hard_sleep'])
self.values_row.append(self.headers[11] + self.parsed_train_data['soft_seat'])
self.values_row.append(self.headers[12] + self.parsed_train_data['hard_seat'])
self.values_row.append(self.headers[13] + self.parsed_train_data['no_seat'])
self.t_num += 1
txt_show_ticket.insert(END, '第%d班:' % self.t_num + '*'*80)
txt_show_ticket.insert(END, '\n')
txt_show_ticket.insert(END, self.values_row)
txt_show_ticket.insert(END, '\n')
# 车票查询
class Query_Ticket():
# 初始化
def __init__(self, txt_show_ticket, ticket_option, from_station, to_station, date):
# 请求地址的模板
self.url_template = (
'https://kyfw.12306.cn/otn/leftTicket/query{}?leftTicketDTO.'
'train_date={}&'
'leftTicketDTO.from_station={}&'
'leftTicketDTO.to_station={}&'
'purpose_codes=ADULT'
)
self.ticket_option = ticket_option
self.from_station = from_station
self.to_station = to_station
self.date = date
# 获得请求地址
def request_url1(self):
return(self.url_template.format('A', self.date, self.from_station, self.to_station))
def request_url2(self):
return(self.url_template.format('Z', self.date, self.from_station, self.to_station))
# 查询车票
def query(self):
self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'}
self.res = requests.get(self.request_url1(), headers=self.headers, verify=False)
try:
try:
self.trains = self.res.json()['data']['result']
except:
self.res = requests.get(self.request_url2(), headers=self.headers, verify=False)
self.trains = self.res.json()['data']['result']
Trains_Demo(txt_show_ticket, self.trains, self.ticket_option).show_trian_data()
except:
title = '提示'
message = '出了点小问题,请重新点击按钮!'
messagebox.showinfo(title, message)
#-------------------------------------------------------------------------------------------------------------------------------------------
# 抢票部分
#-------------------------------------------------------------------------------------------------------------------------------------------
# 抢票
class Buy_Tickets(object):
# 初始化
def __init__(self, username, passwd, order, passengers, dtime, starts, ends):
self.url_template = (
'https://kyfw.12306.cn/otn/leftTicket/query{}?leftTicketDTO.'
'train_date={}&'
'leftTicketDTO.from_station={}&'
'leftTicketDTO.to_station={}&'
'purpose_codes=ADULT'
)
self.username = username
self.passwd = passwd
# 日期
self.dtime = dtime
# 乘客名
self.passengers = passengers.split(',')
# 起始地和终点
self.starts = Station_Parse.parse_station().parse(starts)
self.ends = Station_Parse.parse_station().parse(ends)
if self.starts is None or self.ends is None:
self.title = '提示'
self.message = '请输入有效的车站名'
messagebox.showinfo(self.title, self.message)
# 车次
self.order = order
if self.order != '0':
self.order = self.order_transfer()
while(not self.order):
sleep(1)
self.order = self.order_transfer()
# 起始地和终点转为cookie值
self.starts = self.Get_Cookies()[0] + '%2C' + self.starts
self.ends = self.Get_Cookies()[1] + '%2C' + self.ends
self.login_url = 'https://kyfw.12306.cn/otn/login/init'
self.initMy_url = 'https://kyfw.12306.cn/otn/index/initMy12306'
self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
self.driver_name = 'chrome'
self.executable_path = 'D:\\Python35\\Scripts\\chromedriver.exe'
# 登录
def login(self):
self.driver.visit(self.login_url)
self.driver.fill('loginUserDTO.user_name', self.username)
self.driver.fill('userDTO.password', self.passwd)
self.title = '提示'
self.message = '请在自动打开的浏览器中输入验证码!'
messagebox.showinfo(self.title, self.message)
while True:
if self.driver.url != self.initMy_url:
sleep(1)
else:
br
没有合适的资源?快使用搜索试试~ 我知道了~
python 查票抢票 源码
共6个文件
py:2个
jpg:2个
url:1个
需积分: 5 2 下载量 194 浏览量
2023-03-29
16:14:22
上传
评论
收藏 349KB ZIP 举报
温馨提示
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,现已成为全球最流行的编程语言之一。Python本质上是一种函数式编程语言,它可以让开发者快速构建应用程序,而且可以利用它的强大功能构建出更复杂的应用程序。 Python拥有强大的灵活性,可以用于开发几乎所有类型的应用程序,从网络应用程序,数据库应用程序,游戏,科学计算,移动应用程序等等。因为Python是一种开放源代码的计算机程序设计语言,所以可以免费使用,这使得Python非常受欢迎。 Python还支持查票抢票功能,可以让开发者在网络上查询最新机票信息,并自动抢票。这项功能可以大大提高用户的体验,减少无谓的等待时间。使用Python查票抢票的好处是能够快速的查询最新的机票信息,使用者无需担心机票信息过时,从而提高抢票的效率。 另外,Python还提供了强大的可视化功能,可以用于可视化查票和抢票过程,使用者可以直观的看到查询结果,从而更加便捷的使用Python查票抢票功能。 总之,Python查票抢票功能可以为用户提供更加便捷的机票抢票服务,使用者可以轻松的查询最新
资源推荐
资源详情
资源评论
收起资源包目录
查票抢票.zip (6个子文件)
查票抢票
bg2_demo.png 240KB
站长VX-带你搞钱.jpg 103KB
点击查看更多实操项目-艺铭网创.url 113B
抢票.py 19KB
Station_Parse.py 884B
网站-同名公众号.jpg 7KB
共 6 条
- 1
资源评论
w风雨无阻w
- 粉丝: 2839
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Xmind 24.04.05171.dmg
- testtesttesttesttesttesttesttesttesttest
- 汇编实现从1加到1000的bin文件
- jquery中的一些关键概念简介.pdf
- C++11新特性及其应用场景解析
- 纯css实现的凹槽底部导航菜单,CSS凹型导航按钮效果的实现效果,适用于html5,小程序,uniapp,Vue,nvue等
- windows server 2003 checked版3790
- C++编程入门系列教程
- Windows 10 安全审计及监控参考
- 基于Python+FaceNet的人脸检测+识别的课堂学生签到系统源码+数据集+详细文档(高分毕业设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功