抢票软件涉及到爬取12306网站的数据,自动填写订单信息等操作,以下是一个简单的示例代码:

import requests
import time

def login():
    login_url = "https://kyfw.12306.cn/otn/login/init"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }
    data = {
        "username": "your_username",
        "password": "your_password"
    }
    session = requests.Session()
    session.post(login_url, headers=headers, data=data)
    return session

def query_tickets(session, from_station, to_station, date):
    query_url = f"https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT"
    response = session.get(query_url)
    tickets = response.json()["data"]["result"]
    return tickets

def book_ticket(session, from_station, to_station, date, train_no, seat_type):
    book_url = "https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest"
    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 = session.post(book_url, data=data)
    if response.json()["status"]:
        print("提交订单成功")
        time.sleep(1)
        confirm_url = "https://kyfw.12306.cn/otn/confirmPassenger/initDc"
        response = session.get(confirm_url)
        if response.status_code == 200:
            print("确认乘客信息成功")
            time.sleep(1)
            passenger_url = "https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs"
            response = session.post(passenger_url)
            if response.status_code == 200:
                print("获取乘客信息成功")
                time.sleep(1)
                passenger = response.json()["data"]["normal_passengers"][0]
                passenger_name = passenger["passenger_name"]
                passenger_id = passenger["passenger_id_no"]
                passenger_phone = passenger["mobile_no"]
                passenger_type = passenger["passenger_type"]
                check_url = "https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo"
                data = {
                    "cancel_flag": 2,
                    "bed_level_order_num": "000000000000000000000000000000",
                    "passengerTicketStr": f"{seat_type},0,1,{passenger_name},{passenger_type},{passenger_id},{passenger_phone},N",
                    "oldPassengerStr": f"{passenger_name},{passenger_type},{passenger_id},1_",
                    "tour_flag": "dc",
                    "randCode": "",
                    "whatsSelect": 1,
                    "_json_at": ""
                }
                response = session.post(check_url, data=data)
                if response.status_code == 200:
                    print("校验订单信息成功")
                    time.sleep(1)
                    confirm_submit_url = "https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue"
                    data = {
                        "passengerTicketStr": f"{seat_type},0,1,{passenger_name},{passenger_type},{passenger_id},{passenger_phone},N",
                        "oldPassengerStr": f"{passenger_name},{passenger_type},{passenger_id},1_",
                        "randCode": "",
                        "purpose_codes": "00",
                        "key_check_isChange": "",
                        "leftTicketStr": "",
                        "train_location": "",
                        "whatsSelect": 1,
                        "_json_at": "",
                        "choose_seats": "",
                        "seatDetailType": "000",
                        "roomType": "00",
                        "dwAll": "N",
                        "REPEAT_SUBMIT_TOKEN": ""
                    }
                    response = session.post(confirm_submit_url, data=data)
                    if response.status_code == 200:
                        print("提交订单成功")
                        time.sleep(1)
                        queue_url = "https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime"
                        data = {
                            "random": str(int(time.time() * 1000)),
                            "tourFlag": "dc",
                            "_json_at": ""
                        }
                        response = session.get(queue_url, params=data)
                        if response.status_code == 200:
                            print("正在排队中,请等待...")
                        else:
                            print("查询排队信息失败")
                    else:
                        print("提交订单失败")
                else:
                    print("校验订单信息失败")
            else:
                print("获取乘客信息失败")
        else:
            print("确认乘客信息失败")
    else:
        print("提交订单失败")

if __name__ == "__main__":
    session = login()
    from_station = "北京"
    to_station = "上海"
    date = "2022-01-01"
    tickets = query_tickets(session, from_station, to_station, date)
    if tickets:
        print("查询到以下车次:")
        for ticket in tickets:
            print(ticket)
        train_no = input("请输入要抢票的车次:")
        seat_type = input("请输入要抢票的席别:")
        book_ticket(session, from_station, to_station, date, train_no, seat_type)
    else:
        print("未查询到可用车次")

请注意,12306网站对爬取数据有一定的限制,频繁的请求可能会导致IP被封禁,请谨慎使用抢票软件。此示例代码仅供参考,具体实现可能需要根据12306网站的变化进行调整。另外,使用抢票软件需要提供正确的用户名和密码,建议谨慎保管个人信息

python 做一个使用的12306抢票软件

原文地址: https://www.cveoy.top/t/topic/hLPd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录