- 登录,登录成功之后进入个人详情页面
- 车次以及余票查询
https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc
由个人详情页面跳转到车次查询界面
获取所有的站点以及对应的编号, 保存到一个字典当中
要在出发地 、目的地、 出发日期 这些 input标签里面设置值, 先定位input标签, 获取编号, 用execute_scrip()方法来设置隐藏标签的值
点击查询按钮 出现车次列表
- 解析车次列表
显式等待车次列表(条件: tr标签加载完成)
车次列表分析: tbody标签下面的tr标签
需要过滤车次信息 ,替换加拼接的方式把车次信息放到列表
确定乘坐的席位 点击这个席位的预定按钮
跳转到确认乘客信息的界面
- 第四步 确认乘客信息和席位
显式等待 条件是判断是否确认乘客信息
一人对应一个席位,席位是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