selenium实现12306购票

本文介绍了如何利用Selenium自动化工具进行12306网上购票。从登录12306官网开始,进入个人详情页,然后查询车次及余票。接着,通过设置出发地、目的地和日期,点击查询并解析显示的车次列表。选择席位后,进入乘客信息确认环节,处理可能的异常,最后提交订单完成购票流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 登录,登录成功之后进入个人详情页面
  2. 车次以及余票查询
    https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc
    由个人详情页面跳转到车次查询界面
    获取所有的站点以及对应的编号, 保存到一个字典当中
    要在出发地 、目的地、 出发日期 这些 input标签里面设置值, 先定位input标签, 获取编号, 用execute_scrip()方法来设置隐藏标签的值
    点击查询按钮 出现车次列表
  3. 解析车次列表
    显式等待车次列表(条件: tr标签加载完成)
    车次列表分析: tbody标签下面的tr标签
    需要过滤车次信息 ,替换加拼接的方式把车次信息放到列表
    确定乘坐的席位 点击这个席位的预定按钮
    跳转到确认乘客信息的界面
  4. 第四步 确认乘客信息和席位
    显式等待 条件是判断是否确认乘客信息
    一人对应一个席位,席位是select标签 下标/ value
    该过程需要对NoSuchElementException异常进行处理
    最终提交订单
    等待弹框页面加载出来
    定位确定按钮 提交订单 就会生成订单
    https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc driver.execute_script(‘arguments[0].value="%s"’ % self.train_data, train_data_input)
import csv
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException

driver = webdriver.Chrome()


class TrainSpider:
    login_url = 'https://kyfw.12306.cn/otn/resources/login.html'  # 登录的界面
    personal_url = 'https://kyfw.12306.cn/otn/view/index.html'  # 个人中心
    left_ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc'  # 车次余票
    confirm_passengers_url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'  # 确认乘客信息

    def __init__(self, from_station, to_station, train_data, trains, passengers):
        """
        :param from_station: 出发地
        :param to_station:  目的地
        :param train_data: 出发日期
        :param trains: 想要购买的车次以及车次所对应的席位 {'G403':['M','O'],'T201',{XX}}
        :param passengers: 乘客的姓名 它是一个列表['张三','苍老师']
        """
        self.from_station = from_station
        self.to_station = to_station
        self.train_data = train_data
        self.trains = trains
        self.passengers = passengers
        self.selected_number = None
        self.station_codes = {
   }
        self
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值