必威体育Betway必威体育官网
当前位置:首页 > IT技术

【Selenium_Web_Xpath定位】12306火车票官方订票网站,查询余票/车次的自动化测试案例

时间:2019-10-13 20:42:14来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

余票查询

#!/usr/bin/env/Python3
# -*- coding:utf-8 -*-
'''
Author:leo
Date&Time:2019-07-27 and 12:22
FileName:12306_成都到重庆
Description:Python3.5+selenium3.0
'''
'''
场景:
1.打开12306官方订票网站:https://kyfw.12306.cn/otn/leftticket/init
2.出发城市填写 ‘成都东’,到达城市填写 ‘重庆北’ 
(陷阱1:注意输入城市名前,一定要先点击一下输入框,否则查不到) 
(陷阱2:输入城市名最后要包含一个回车符,否则输入框里面会自动清除)
3.发车时间选 06:00--12:00。(可以用Select类通过下标选取,也可以用Xpathposition()方法选取)
4.发车日期选 当前时间的下一天,也就是日期标签栏的,第二个标签。(可以用CSS-#date_range li:nth-child(2)直接选取,也可以用xpath遍历选取)

我们要查找的是所有 二等座还有票的车次,打印出这些有票的车次的信息(这里可以用xpath),结果如下:
1:D2244|成都东|重庆北|06:43|08:52|02:09|当日到达
2:G2371|成都东|重庆西|07:03|08:27|01:24|当日到达


'''
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select

# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.get("https://kyfw.12306.cn/otn/leftTicket/init")
driver.implicitly_wait(3)
sleep(3)

# 出发站
driver.find_element_by_id("fromStationText").click()
driver.find_element_by_id("fromStationText").send_keys("成都东")
# 模拟键盘操作:回车键
driver.find_element_by_id("fromStationText").send_keys(Keys.ENTER)

# 终点站
driver.find_element_by_id("toStationText").click()
driver.find_element_by_id("toStationText").send_keys("重启北")
driver.find_element_by_id("toStationText").send_keys(Keys.ENTER)

# 出发日期-逻辑运算符and多元素定位
driver.find_element_by_xpath("//input[@id='train_date' and @class='inp_selected']").click()
calLeft = driver.find_elements_by_css_selector("p.cal-wrap>p.cal p.cal-cm>p")
count, now = 0, 0
for date in calLeft:
    count += 1
    if date.text == r"今天":
        now = count
        print(f"{date.text}是当月第{count}天,我将买明天的车票。")
    if count == now+1:
        date.click()

# 日期选择用法2:通过切换日期列表,选择第二个日期tomorrow,自动搜索车票
# tomorrow = driver.find_element_by_css_selector('#date_range li:nth-child(2)')


# 出发时间:06:00-12:00
driver.find_element_by_id("cc_start_time").click()
sleep(1)
driver.find_element_by_xpath("//select[@id='cc_start_time']/option[position()=3]").click()
sleep(1)

# 出发时间用法2:导入Select,通过下拉框选择出发时间的用法
# timeSelect =  Select(driver.find_element_by_id('cc_start_time'))
# timeSelect.select_by_visible_text('06:00--12:00')


# 点击查询
driver.find_element_by_id("query_ticket").click()
sleep(3)

# 打印结果
# trainNums = driver.find_elements_by_xpath("//p[@id='t-list']/table/tbody[@id='queryLeftTable']/tr")
# 高级判断:二等座td[4]加上[@class],判断如果有票,就有class属性,没有票就没有class属性,子路径选中第一个td,牛逼!
trainNums = driver.find_elements_by_xpath("//*[@id='queryLeftTable']//td[4][@class]/../td[position()<2]")
num = 0
for train in trainNums:
    new = str(train.text).replace("\n"," | ")
    num +=1
    print(f"{num:<2}:{new}")


# 关闭浏览器(上次忘掉这个,导致电脑卡到飞起)
sleep(5)
driver.close()

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

今天是当月第27天,我将买明天的车票。

1 :D2244 | 成都东 | 重庆北 | 06:43 | 08:52 | 02:09 | 当日到达

2 :G2371 | 成都东 | 重庆西 | 07:03 | 08:27 | 01:24 | 当日到达

3 :D1781 | 成都东 | 重庆西 | 07:12 | 09:09 | 01:57 | 当日到达

4 :G8543 | 成都东 | 沙坪坝 | 07:25 | 08:53 | 01:28 | 当日到达

5 :G1755 | 成都东 | 重庆西 | 07:30 | 09:02 | 01:32 | 当日到达

6 :G8541 | 成都东 | 沙坪坝 | 07:43 | 09:18 | 01:35 | 当日到达

7 :G8683 | 成都南 | 重庆西 | 08:06 | 09:28 | 01:22 | 当日到达

8 :G1983 | 成都东 | 重庆西 | 08:15 | 09:55 | 01:40 | 当日到达

9 :D1801 | 成都东 | 重庆西 | 08:20 | 09:50 | 01:30 | 当日到达

10:G8701 | 成都东 | 重庆北 | 08:35 | 10:10 | 01:35 | 当日到达

11:G8751 | 成都东 | 重庆北 | 09:37 | 11:10 | 01:33 | 当日到达

12:D2260 | 成都东 | 重庆北 | 10:22 | 12:24 | 02:02 | 当日到达

13:G8545 | 成都东 | 沙坪坝 | 10:32 | 12:06 | 01:34 | 当日到达

14:G8705 | 成都东 | 重庆北 | 10:53 | 12:44 | 01:51 | 当日到达

15:G8691 | 成都东 | 重庆西 | 11:11 | 12:28 | 01:17 | 当日到达

16:G8509 | 成都东 | 重庆北 | 11:22 | 13:04 | 01:42 | 当日到达

17:G8565 | 成都东 | 沙坪坝 | 11:37 | 12:57 | 01:20 | 当日到达

18:G8567 | 成都东 | 沙坪坝 | 11:53 | 13:06 | 01:13 | 当日到达

19:G8529 | 成都东 | 重庆北 | 11:59 | 13:36 | 01:37 | 当日到达

Process finished with exit code 0

相关阅读

360抢票三代添加优先车次时最多只能选5个

又是一年春运抢票之时,用360抢票三代抢火车票的朋友肯定不少,但360抢票添加优先车次时最多只能选5个,抢G开头的高铁票的朋友一定就会

分享到:

栏目导航

推荐阅读

热门阅读