最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+selenium實現(xiàn)自動搶票功能實例代碼

 更新時間:2018年11月23日 11:13:56   作者:小酒館  
Selenium是ThoughtWorks公司的一個強大的開源Web功能測試工具系列,采用Javascript來管理整個測試過程,包括讀入測試套件、執(zhí)行測試和記錄測試結(jié)果。這篇文章主要介紹了python+selenium實現(xiàn)自動搶票,需要的朋友可以參考下

簡介

什么是Selenium?

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

使用說明

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

相關(guān)文檔

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

代碼示例

# encoding: utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
class Qiangpiao(object):
  def __init__(self):
    driver_path = "E:\py_pachong\chromedriver.exe"
    # 瀏覽器驅(qū)動
    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):
    """
    主要用于頁面審核;
    當輸入出發(fā)地,目的地,乘車時間后,會自動出發(fā)查詢submit
    :return:
    """
    self.from_station = input("出發(fā)地:")
    self.to_station = input("目的地:")
    self.depart_time = input("出發(fā)時間:")
    self.passengers = input("乘客姓名:").split(",")
    self.trains = input("車次:").split(",")
  def _login(self):
    """
    登陸驗證,登陸成功后會跳轉(zhuǎn)到 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):
    """
    只實現(xiàn)了在無票的情況下去刷票
    最關(guān)鍵的是等待驗證 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()

總結(jié)

以上所述是小編給大家介紹的python+selenium實現(xiàn)自動搶票功能實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Django模板語言 Tags使用詳解

    Django模板語言 Tags使用詳解

    這篇文章主要介紹了Django模板語言 Tags使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • python實現(xiàn)淘寶秒殺聚劃算搶購自動提醒源碼

    python實現(xiàn)淘寶秒殺聚劃算搶購自動提醒源碼

    這篇文章主要為大家詳細介紹了Python實現(xiàn)淘寶秒殺聚劃算搶購自動提醒源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python實現(xiàn)批量圖片的切割

    Python實現(xiàn)批量圖片的切割

    本文主要介紹了Python實現(xiàn)批量圖片的切割,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • python?Pangu自動美化中文排版工具使用探索

    python?Pangu自動美化中文排版工具使用探索

    這篇文章主要為大家介紹了python?Pangu自動美化中文排版工具使用探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python函數(shù)的參數(shù)常見分類與用法實例詳解

    Python函數(shù)的參數(shù)常見分類與用法實例詳解

    這篇文章主要介紹了Python函數(shù)的參數(shù)常見分類與用法,結(jié)合實例形式較為詳細的分析了Python函數(shù)的形參、實參、默認參數(shù)、可變參數(shù)等概念、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-03-03
  • numpy中np.dstack()、np.hstack()、np.vstack()用法

    numpy中np.dstack()、np.hstack()、np.vstack()用法

    numpy里dstack, hstack, vstack, 都有拼接的作用,本文詳細的介紹了np.dstack()、np.hstack()、np.vstack()用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 在Linux命令行終端中使用python的簡單方法(推薦)

    在Linux命令行終端中使用python的簡單方法(推薦)

    下面小編就為大家?guī)硪黄贚inux命令行終端中使用python的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python常用Web框架Django、Flask與Tornado介紹

    Python常用Web框架Django、Flask與Tornado介紹

    這篇文章介紹了Python常用Web框架Django、Flask與Tornado,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 基于Python編寫一個打印機批量打印隊列工具

    基于Python編寫一個打印機批量打印隊列工具

    有時候我們在批量打印文件的時候,總會遇到電腦上打印機隊列打不開的情況,為此我們可以利用Python寫一個打印機批量打印隊列,下面小編就來和大家詳細講講吧
    2025-02-02
  • Python實現(xiàn)的簡單萬年歷例子分享

    Python實現(xiàn)的簡單萬年歷例子分享

    這篇文章主要介紹了Python實現(xiàn)的簡單萬年歷例子分享,需要的朋友可以參考下
    2014-04-04

最新評論

嘉禾县| 中卫市| 顺义区| 九龙城区| 洪雅县| 德阳市| 鲁山县| 崇仁县| 伊通| 新丰县| 中阳县| 来宾市| 滨海县| 南溪县| 城口县| 丹凤县| 修水县| 诏安县| 海宁市| 弋阳县| 蛟河市| 灵山县| 乡城县| 安庆市| 铁力市| 大安市| 工布江达县| 樟树市| 镇安县| 宁阳县| 绥棱县| 仪陇县| 栖霞市| 子长县| 石阡县| 寿宁县| 米易县| 白水县| 苗栗县| 文成县| 石城县|