python高铁抢票脚本
时间: 2023-10-30 10:06:41 浏览: 170
抢票脚本是一种利用计算机程序自动查询和订购火车票的工具。在Python中,可以使用第三方库如requests、selenium等来实现高铁抢票脚本。脚本的基本原理是通过发送HTTP请求模拟用户在火车票网站上查询和提交订单的操作。
下面是一个简单的Python高铁抢票脚本的示例:
```python
import requests
def search_tickets(date, from_station, to_station):
# 构造查询参数
params = {
'leftTicketDTO.train_date': date,
'leftTicketDTO.from_station': from_station,
'leftTicketDTO.to_station': to_station,
'purpose_codes': 'ADULT'
}
# 发送查询请求
response = requests.get('https://kyfw.12306.cn/otn/leftTicket/queryZ', params=params)
# 解析查询结果
result = response.json()
# 处理查询结果
if result['status'] and result['httpstatus'] == 200:
tickets = result['data']['result']
# 提取票价、余票数量等信息
# 进行自定义筛选和排序
# 返回符合条件的火车票信息
else:
print('查询失败')
def book_ticket(date, from_station, to_station, train_no, seat_type):
# 构造提交订单的数据
data = {
'secretStr': '',
'train_date': date,
'back_train_date': date,
'tour_flag': 'dc',
'purpose_codes': 'ADULT',
'query_from_station_name': from_station,
'query_to_station_name': to_station,
'undefined': ''
}
# 发送提交订单请求
response = requests.post('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest', data=data)
# 处理提交订单结果
if response.status_code == 200:
# 解析返回的JSON数据
result = response.json()
if result['status']:
# 获取令牌
token = result['data']['token']
# 获取车次信息
train_info = result['data']['queryLeftTicketRequestDTO']
# 构造乘客信息
passengers = [
{'passenger_name': '张三', 'passenger_id_type_code': '1', 'passenger_id_no': '身份证号码', 'mobile_no': '手机号码'}
# 可以添加更多乘客信息
]
# 提交订单
submit_order(token, train_info, passengers, seat_type)
else:
print('提交订单失败')
else:
print('提交订单请求失败')
def submit_order(token, train_info, passengers, seat_type):
# 构造确认订单的数据
data = {
'_json_att': '',
'REPEAT_SUBMIT_TOKEN': token,
'purpose_codes': 'ADULT',
'passengerTicketStr': '',
'oldPassengerStr': '',
'randCode': ''
}
# 发送确认订单请求
response = requests.post('https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue', data=data)
# 处理确认订单结果
if response.status_code == 200:
# 解析返回的JSON数据
result = response.json()
if result['status']:
# 确认订单成功,获取订单号
order_no = result['data']['orderId']
# 提交订单支付
pay_order(order_no)
else:
print('确认订单失败')
else:
print('确认订单请求失败')
def pay_order(order_no):
# 构造支付订单的数据
data = {
'orderSequence_no': order_no
}
# 发送支付订单请求
response = requests.post('https://kyfw.12306.cn/otn//payOrder/init', data=data)
# 处理支付订单结果
if response.status_code == 200:
# 解析返回的HTML数据
# 提取支付链接或二维码等信息
else:
print('支付订单请求失败')
# 使用示例
search_tickets('2022-01-01', '北京', '上海')
book_ticket('2022-01-01', '北京', '上海', 'G1234', '二等座')
```
上述示例中的代码只是一个简单的框架,具体的实现需要根据实际情况进行调整和完善。另外,需要注意的是,使用高铁抢票脚本有一定的法律和道德风险,请确保遵守相关法律法规和网站规定。
阅读全文