国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python+selenium實現自動搶票功能實例代碼

2020-02-15 23:46:35
字體:
來源:轉載
供稿:網友

簡介

什么是Selenium?

Selenium是ThoughtWorks公司的一個強大的開源Web功能測試工具系列,采用Javascript來管理整個測試過程,包括讀入測試套件、執行測試和記錄測試結果。它采用Javascript單元測試工具JSUnit為核心,模擬真實用戶操作,包括瀏覽頁面、點擊鏈接、輸入文字、提交表單、觸發鼠標事件等等,并且能夠對頁面結果進行種種驗證。也就是說,只要在測試用例中把預期的用戶行為與結果都描述出來,我們就得到了一個可以自動化運行的功能測試套件。(Selenium的核心是Javascript寫的,他和瀏覽器進行通信,把測試用例的信息發送給瀏覽器執行,從而達到自動化測試的目的。)

使用說明

程序運行開始,需要輸入出發地,目的地,出發時間,乘客信息,車次;乘客信息和車次可以輸入多個
剛剛開始學習爬蟲,selenium僅僅是解放了雙手,運行效率不是很高;
程序運行時會打開chrome瀏覽器,因為使用的是chrome的瀏覽器驅動;

相關文檔

https://selenium-python.readthedocs.io/installation.html#introduction

代碼示例

# encoding: utf-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byimport timeclass Qiangpiao(object):  def __init__(self):    driver_path = "E:/py_pachong/chromedriver.exe"    # 瀏覽器驅動    self.drive = webdriver.Chrome(executable_path=driver_path)    # 登陸鏈接    self.login_url = "https://kyfw.12306.cn/otn/login/init"    # 登陸后的鏈接    self.initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"    # 查詢頁面    self.search_url = "https://kyfw.12306.cn/otn/leftTicket/init"    # 乘車人頁面    self.passenger_url = "https://kyfw.12306.cn/otn/confirmPassenger/initDc"  def wait_input(self):    """    主要用于頁面審核;    當輸入出發地,目的地,乘車時間后,會自動出發查詢submit    :return:    """    self.from_station = input("出發地:")    self.to_station = input("目的地:")    self.depart_time = input("出發時間:")    self.passengers = input("乘客姓名:").split(",")    self.trains = input("車次:").split(",")  def _login(self):    """    登陸驗證,登陸成功后會跳轉到 self.initmy_url    :return:    """    self.drive.get(self.login_url)    WebDriverWait(self.drive, 1000).until(      EC.url_to_be(self.initmy_url)    )    print('登錄成功')  def _order_ticket(self):    """    只實現了在無票的情況下去刷票    最關鍵的是等待驗證 WebDriverWait    :return:    """    self.drive.get(self.search_url)    WebDriverWait(self.drive, 1000).until(      EC.text_to_be_present_in_element_value((By.ID, "fromStationText"), self.from_station)    )    WebDriverWait(self.drive, 1000).until(      EC.text_to_be_present_in_element_value((By.ID, "toStationText"), self.to_station)    )    WebDriverWait(self.drive, 1000).until(      EC.text_to_be_present_in_element_value((By.ID, "train_date"), self.depart_time)    )    WebDriverWait(self.drive, 10000).until(      EC.element_to_be_clickable((By.ID, "query_ticket"))    )    searchBtn = self.drive.find_element_by_id("query_ticket")    searchBtn.click()    WebDriverWait(self.drive, 1000).until(      EC.presence_of_element_located((By.XPATH, ".//tbody[@id='queryLeftTable']/tr"))    )    # find_elements_by_xpath 返回的是一個列表    # find_element_by_xpath 返回的是一個元素    tr_list = self.drive.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")    for tr in tr_list:      train_num = tr.find_element_by_class_name("number").text      # print(train_num)      if train_num in self.trains:        left_ticket_td = tr.find_element_by_xpath(".//td[4]").text        num = 1        while left_ticket_td == "無":          print("暫時無票,正在刷新")          time.sleep(2)          searchBtn.click()          num += 1          print("搶票%s次" % num)          if left_ticket_td != "無":            print(train_num + "有票")            oderBtn = tr.find_element_by_xpath(".//td[13]/a")            oderBtn.click()            WebDriverWait(self.drive, 1000).until(              EC.url_to_be(self.passenger_url)            )            WebDriverWait(self.drive, 1000).until(              EC.presence_of_element_located((By.XPATH, ".//ul[@id='normal_passenger_id']/li"))            )            passenger_labels = self.drive.find_elements_by_xpath(              ".//ul[@id='normal_passenger_id']/li/label")            for passenger_label in passenger_labels:              name = passenger_label.text              if name in self.passengers:                passenger_label.click()            submitBtn = self.drive.find_element_by_id("submitOrder_id")            submitBtn.click()            WebDriverWait(self.drive, 1000).until(              EC.presence_of_element_located((By.CLASS_NAME, "dhtmlx_wins_body_outer"))            )            WebDriverWait(self.drive, 1000).until(              EC.presence_of_element_located((By.ID, "qr_submit_id"))            )            qr_submit = self.drive.find_element_by_id("qr_submit_id")            qr_submit.click()  def run(self):    self.wait_input()    self._login()    self._order_ticket()if __name__ == '__main__':  spider = Qiangpiao()  spider.run()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 四子王旗| 全州县| 东山县| 建德市| 城口县| 凤凰县| 桐柏县| 昌都县| 星子县| 定远县| 正阳县| 萨迦县| 镇宁| 通辽市| 柳州市| 仙桃市| 威信县| 垦利县| 南皮县| 临泽县| 南充市| 平谷区| 东莞市| 榆社县| 新郑市| 紫阳县| 神木县| 岳普湖县| 梅河口市| 周口市| 沁阳市| 卫辉市| 徐州市| 海口市| 商城县| 福海县| 夏津县| 兴安县| 东明县| 泰和县| 凤山县|