python+selenium實現自動搶票
使用說明
程式執行開始,需要輸入出發地,目的地,出發時間,乘客資訊,車次;乘客資訊和車次可以輸入多個 剛剛開始學習爬蟲,selenium僅僅是解放了雙手,執行效率不是很高; 程式執行時會開啟chrome瀏覽器,因為使用的是chrome的瀏覽器驅動;
相關文件
程式碼示例
# 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_pachongchromedriver.exe" # 瀏覽器驅動 self.drive = webdriver.Chrome(executable_path=driver_path) # 登陸連結 self.login_url = "" # 登陸後的連結 self.initmy_url = "" # 查詢頁面 self.search_url = "" # 乘車人頁面 self.passenger_url = "" 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()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1834/viewspace-2817810/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python3.6實現12306火車票自動搶票Python
- python實現自動搶課指令碼Python指令碼
- Python+selenium實現Drcom校園網自動檢測網路以及自動登入Python
- 12306自動搶票及自動識別驗證碼功能(二)
- 【python+selenium的web自動化】- 針對上傳操作的實現方案PythonWeb
- Python3實現搶火車票功能(下)Python
- 利用 JS 指令碼實現網頁全自動秒殺搶購JS指令碼網頁
- 從零實現一款12306搶票軟體
- python+selenium實現動態爬取及selenuim的常用操作PythonUI
- 2019春運火車票搶票攻略,候補購票撿漏搶票技巧
- 學會Python+Selenium,分分鐘搭建Web自動化框架!PythonWeb框架
- 【python+selenium的web自動化】- PageObject模式解析及案例PythonWebObject模式
- Spring AOP 實現《自動自動填充Entity》Spring
- python+selenium UI自動化測試環境搭建及使用PythonUI
- Selenium自動化實現web自動化-1Web
- 【python+selenium的web自動化】- 元素的常用操作詳解(一)PythonWeb
- 簡易實現 HTTPS (一) 自動實現 sslHTTP
- IT 自動化:如何去實現
- 12306對第三方搶票軟體實施限制 平臺:可正常搶票 未受限制
- 最新12306搶票爬蟲爬蟲
- Python教你全自動搶微信紅包Python
- 使用gulp實現前端自動化前端
- iOS如何實現自動化打包iOS
- 使用 fastlane 實現自動化打包AST
- 使用LangChain實現自動寫作LangChain
- 實現指令碼自動部署docker指令碼Docker
- Docker 搭建 Jenkins 實現自動部署DockerJenkins
- Vue實現自動觸發功能Vue
- 如何實現辦公自動化?
- 12306火車票搶票Python程式碼最新完整版釋出,五一搶票就靠它了!Python
- 是否只有實現了容器化、自動編排等等才算是實現了運維自動化?運維
- [原] php + Laravel 實現部署自動化PHPLaravel
- 如何實現高度自動化測試?
- CRD實現自動化容器安全方法
- python自動化審計及實現Python
- GitLab整合kubernetes實現自動釋出Gitlab
- 搭建jenkins配合gitee實現自動部署JenkinsGitee
- python實現自動化辦公01Python