如果你還想從頭學起Selenium,可以看看這個系列的文章哦!
https://www.cnblogs.com/poloyy/category/1680176.html
其次,如果你不懂前端基礎知識,需要自己去補充哦,博主暫時沒有總結(雖然我也會,所以我學selenium就不用復習前端了哈哈哈...)
注意,目前的實戰都是流水賬式寫的,后面才會結合框架+PO模式
目的是為了掌握所學的Selenium基礎
實戰題目
- 打開 12306 網站 https://kyfw.12306.cn/otn/leftTicket/init
- 出發城市 填寫 ‘南京南’, 到達城市 填寫 ‘杭州東'
- 發車時間 選 06:00--12:00
- 發車日期選當前時間的下一天,也就是日期標簽欄的,第二個標簽
- 我們要查找的是所有 二等座還有票的車次,打印出這些有票的車次的信息,結果如下:
G7641
G1505
G7393
G7689
代碼思路(人為測試時的操作步驟)
- 點擊【出發城市】,輸入並點擊南京南
- 點擊【到達城市】,輸入並點擊杭州東
- 選擇發車時間 06:00--12:00
- 選擇第二個日期標簽
- 獲取到車次列表
- 循環列表,獲取車次號和二等座那一列的數據
- 正則匹配是否有坐
- 輸出車次號
代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = __Time__ = 2020-03-31 21:30 __Author__ = 小菠蘿測試筆記 __Blog__ = https://www.cnblogs.com/poloyy/ """ import re from time import sleep from selenium.webdriver.support.select import Select from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome("../resources/chromedriver.exe") def wait_element(by_, element_): element = WebDriverWait(driver, timeout=10).until( ec.presence_of_element_located((by_, element_)) ) return element def wait_elements(by_, element_): element = WebDriverWait(driver, timeout=10).until( ec.presence_of_all_elements_located((by_, element_)) ) return element # 打開網站 driver.get("https://kyfw.12306.cn/otn/leftTicket/init") driver.maximize_window() # 出發城市 填寫 ‘南京南’, from_ = wait_element(By.CSS_SELECTOR, "input#fromStationText") from_.click() from_.send_keys("南京南") # 選擇南京南 driver.find_element_by_css_selector("div#citem_0").click() # 到達城市 填寫 ‘杭州東’ to = wait_element(By.CSS_SELECTOR, "input#toStationText") to.click() to.send_keys("杭州東") # 選擇杭州東 driver.find_element_by_css_selector("div#citem_0").click() # 發車時間 選 06:00--12:00 select = Select(driver.find_element_by_css_selector("select#cc_start_time")) # 選擇 select.select_by_visible_text("06:00--12:00") # 發車日期選當前時間的下一天,也就是日期標簽欄的,第二個標簽 date_range = driver.find_elements_by_css_selector("div#date_range>ul>li") date_range[1].click() # 數據列表 lists = wait_elements(By.CSS_SELECTOR, "tbody#queryLeftTable>tr")[0::2] print(len(lists)) # 循環數據 for data in lists: number = data.find_element_by_css_selector("td>div>div.train a.number").text two = data.find_elements_by_css_selector("td")[3].text if re.findall("有|\d+", two): print(number) sleep(10) driver.quit()