12306抢票脚本 python
时间: 2023-06-21 21:04:22 浏览: 384
抢票脚本存在一定的法律风险和道德问题,建议不要使用。以下是一个简单的示例代码,仅供参考:
```python
import requests
import json
import time
# 登录接口
login_url = 'https://kyfw.12306.cn/passport/web/login'
# 查询余票接口
left_ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/query'
# 登录信息
username = 'your_username'
password = 'your_password'
# 出发站、到达站、日期
from_station = 'BJP'
to_station = 'SHH'
train_date = '2022-01-01'
# 登录请求头
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'https://kyfw.12306.cn/otn/login/init',
}
# 登录请求参数
data = {
'username': username,
'password': password,
'appid': 'otn',
}
# 登录
session = requests.session()
response = session.post(login_url, headers=headers, data=data)
result = json.loads(response.text)
if result['result_code'] == 0:
print('登录成功')
else:
print('登录失败')
exit()
# 查询余票
while True:
try:
params = {
'leftTicketDTO.train_date': train_date,
'leftTicketDTO.from_station': from_station,
'leftTicketDTO.to_station': to_station,
'purpose_codes': 'ADULT',
}
response = session.get(left_ticket_url, params=params)
result = json.loads(response.text)
if result['httpstatus'] == 200 and result['status'] and result['data']:
for train in result['data']['result']:
train_list = train.split('|')
# 车次、出发时间、到达时间、历时、商务座、一等座、二等座
train_no = train_list[3]
start_time = train_list[8]
arrive_time = train_list[9]
duration = train_list[10]
swz_num = train_list[32] or '--'
ydz_num = train_list[31] or '--'
edz_num = train_list[30] or '--'
if swz_num != '--' or ydz_num != '--' or edz_num != '--':
print(train_no, start_time, arrive_time, duration, swz_num, ydz_num, edz_num)
else:
print('查询余票失败')
except Exception as e:
print('查询余票失败', e)
time.sleep(1)
```
注意,此代码仅为示例,实际情况中可能需要处理验证码、购票等问题。再次提醒,抢票脚本存在法律风险和道德问题,建议不要使用。
阅读全文