這篇文章主要介紹python+splinter如何實現(xiàn)12306網(wǎng)站刷票并自動購票流程,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)服務(wù)項目包括義縣網(wǎng)站建設(shè)、義縣網(wǎng)站制作、義縣網(wǎng)頁制作以及義縣網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,義縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到義縣省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!通過python+splinter,實現(xiàn)在12306網(wǎng)站刷票并自動購票流程(無法自動識別驗證碼)。
此類程序只是提高了12306網(wǎng)站的 <查詢> 刷新頻率(默認(rèn)自動查詢的刷新頻率為5秒)。對于學(xué)習(xí)splinter感覺還是不錯的,但是想通過裝個類似刷票程序成功購票的 還是多花點錢升級升級硬件設(shè)備,提高提高網(wǎng)速吧。
程序?qū)懙挠悬c亂,隨時修改ing。
#!/usr/bin/env python3 # encoding: utf-8 from splinter.browser import Browser import time #12306的賬號,密碼 user_name = 'xxxxxxxxxx' #自行修改 pass_word = 'xxxxxxxxxx' # 通過splinter,登錄12306網(wǎng)站(登錄驗證碼需要手動驗證) b = Browser(driver_name = 'firefox') # 設(shè)置火狐瀏覽器 b.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 打開12306界面 b.find_by_id(u'login_user') # 點擊登錄按鈕 b.fill('loginUserDTO.user_name',user_name) # 填寫賬號 b.fill('userDTO.password',pass_word) # 填寫密碼 # 手動填寫驗證碼并登錄,登錄成功后等待自動跳轉(zhuǎn)到購票頁面。 ''' 跳轉(zhuǎn)頁面過程中: 程序可能會報錯:[WinError 10053] 您的主機中的軟件中止了一個已建立的連接。 原因:未知 解決辦法:寫一個循環(huán),程序不停的嘗試鏈接跳轉(zhuǎn)頁面(總會成功),成功后跳出循環(huán)。 ''' while True: if b.url == 'https://kyfw.12306.cn/otn/index/initMy12306': # 判斷是否登錄成功 try: b.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 訪問購票頁面 except ConnectionAbortedError: #捕捉可能出現(xiàn)的異常,繼續(xù)訪問 b.visit('https://kyfw.12306.cn/otn/leftTicket/init') if b.url == 'https://kyfw.12306.cn/otn/leftTicket/init': # 判斷是否跳轉(zhuǎn)購票頁面成功 break # 添加、加載cookies信息,查詢余票。(自動添加出發(fā)地、目的地、日期,例如:北京-鄭州) b.cookies.add({'_jc_save_fromDate':'2018-08-11'}) # 出發(fā)日期 b.cookies.add({'_jc_save_fromStation':u'%u5317%u4EAC%2CBJP'}) # 出發(fā)站信息(北京) b.cookies.add({'_jc_save_toDate':'2018-08-11'}) # 到達(dá)日期 b.cookies.add({'_jc_save_toStation':u'%u90D1%u5DDE%2CZZF'}) # 目的地信息(鄭州) b.reload() # 重新加載cookies b.find_by_text(u'查詢').click() #點擊查詢 # 添加車次類型 l = ['GC-高鐵/城際','D-動車','Z-直達(dá)','T-特快','K-快速','其他']#在列表里可以去掉不需要的車次類型 for i in l: btn = b.find_by_text(i) btn.click() # 下拉訂票幫手(此步驟可跳過) b.find_by_id(u'show_more').click() # 設(shè)置坐席 def The_seat(): ''' 添加坐席后,網(wǎng)站會自動勾選<自動提交>、<自動查詢>功能。 <自動查詢> 默認(rèn)的是5秒刷新一次(慢),所以我們要關(guān)閉此選項,提高刷新頻率。 ''' seat =['二等座','軟臥','硬臥','硬座','無座'] #設(shè)置一個坐席列表 b.find_by_xpath('/html/body/div[6]/div[5]/div[2]/div[7]/div[2]/span/a').click()#打開坐席選擇的菜單窗口 for i in seat: b.find_by_name(i).click() #添加坐席 b.find_by_xpath('/html/body/div[11]/div[1]/a').click()#關(guān)閉彈窗 b.find_by_text(u'開啟自動查詢').click()# 點擊關(guān)閉<自動查詢>選項(慢)。關(guān)閉自動查詢功能后,自動提交功能也會關(guān)閉。 # 購票 def Train_ticket_purchase(): The_seat() #設(shè)置坐席 b.find_by_id(u'show_more').click() # 關(guān)閉訂票幫手(此步驟可跳過) #查詢訂票 while b.url != 'https://kyfw.12306.cn/otn/confirmPassenger/initDc': #以預(yù)訂成功跳轉(zhuǎn)頁面為判斷條件 try: b.find_by_text(u'查詢').click() # 點擊查詢 if b.is_element_present_by_text(u'預(yù)訂') == True: #判斷是否有<預(yù)訂> for i in b.find_by_text(u'預(yù)訂'): # b.fin_by_text(u'預(yù)訂'),返回包含<預(yù)訂>元素的列表,其中有些可以點擊‘預(yù)訂'購票,有些‘預(yù)訂'顯灰色無票狀態(tài),無法點擊預(yù)訂購票的。 if i.has_class('btn72'): #篩選<預(yù)訂>元素,區(qū)分可以點擊預(yù)訂的和不可以點擊的(可以點擊<預(yù)訂>的元素,都包含屬性class('btn72')) i.click()#點擊預(yù)訂購票 if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_hearder"]') == True: #可能會彈窗提示:當(dāng)前時間不可預(yù)訂 b.find_by_xpath('//*[@id="gb_closeDefaultWarningWindowDialog_id"]').click() # 關(guān)閉提示彈窗 print('當(dāng)前時間不可預(yù)訂,請關(guān)閉程序稍后再運行。') break if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_title"]') == True: #可能會彈窗提示:您選擇的列車距開車時間很近了,請確保有足夠的時間抵達(dá)車站,并辦理換取紙質(zhì)車票、安全檢查、實名制驗證及檢票等手續(xù),以免耽誤您的旅行。 b.find_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click() #關(guān)閉彈窗(注意:關(guān)閉彈窗,但是仍然會購票) b.find_by_text(u'xxx')[1].click() #自行添加乘車人名字(注意:登錄賬號本人的名字元素可能會有兩個(一個賬號,一個乘車人),注意區(qū)分開) b.find_by_text(u'提交訂單').click() #確認(rèn)訂單(不知道為什么 b.find_by_xpath()方法不行。。。。) b.find_by_css('html body#body_id.dhtmlx_winviewport.dhtmlx_skin_dhx_terrace div.dhtmlx_window_active div.dhtmlx_wins_body_outer div.dhtmlx_wins_body_inner.dhtmlx_wins_no_header div div#checkticketinfo_id div#content_checkticketinfo_id.up-box.w664 div.up-box-bd.ticket-check div#confirmDiv.lay-btn a#qr_submit_id.btn92s').click() print('預(yù)訂成功,退出程序') break else: print('暫時沒票,繼續(xù)查詢中...') else: print('暫時沒票,繼續(xù)查詢中...') except: print('不可預(yù)訂,請稍后再次運行程序...') break if __name__ == '__main__': Train_ticket_purchase()
以上是“python+splinter如何實現(xiàn)12306網(wǎng)站刷票并自動購票流程”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標(biāo)題:python+splinter如何實現(xiàn)12306網(wǎng)站刷票并自動購票流程-創(chuàng)新互聯(lián)
本文地址:http://www.rwnh.cn/article16/dcicgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計公司、外貿(mào)建站、商城網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容