余票查询
#!/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抢票三代抢火车票的朋友肯定不少,但360抢票添加优先车次时最多只能选5个,抢G开头的高铁票的朋友一定就会