麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美精品一区二区久久 | 毛片网站网址 | 一本色道久久久888 香蕉视频99 | 黄视频在线网站 | 欧美成人一区二区三区电影 | 精品国产99久久久久久宅男i | 日本黄色a视频 | 日韩一级成人 | 精品一区二区免费 | 精品一区二区在线播放 | 中国老女人一级毛片视频 | 极品国产91在线网站 | 美女污污视频在线观看 | 在线观看国产网站 | 国产精品视频2021 | 久久亚洲美女视频 | 色婷婷tv| 成人午夜视频免费在线观看 | 国产韩国精品一区二区三区久久 | www.成人在线视频 | 97久色 | 成人黄色小视频网站 | 男人的天堂色偷偷 | 国产精品亚洲精品日韩已方 | 欧美a在线看 | 国产一区二区视频观看 | 99re热视频这里只精品 | av老司机久久 | av日韩在线免费观看 | 视频一区二区视频 | 欧美人禽 | 国产一区免费在线 | 国产亚洲精品成人 | 欧美黄色一级生活片 | 91美女福利视频 | 在线观看国产一区二区 | 欧美女同hd | 国产毛片网站 | 亚洲日本欧美 | 亚洲片在线 | 免费久久精品 |