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

首頁 > 編程 > Python > 正文

python+splinter實(shí)現(xiàn)12306網(wǎng)站刷票并自動(dòng)購票流程

2020-02-15 23:03:12
字體:
供稿:網(wǎng)友

通過python+splinter,實(shí)現(xiàn)在12306網(wǎng)站刷票并自動(dòng)購票流程(無法自動(dòng)識(shí)別驗(yàn)證碼)。

此類程序只是提高了12306網(wǎng)站的 <查詢> 刷新頻率(默認(rèn)自動(dòng)查詢的刷新頻率為5秒)。對于學(xué)習(xí)splinter感覺還是不錯(cuò)的,但是想通過裝個(gè)類似刷票程序成功購票的 還是多花點(diǎn)錢升級(jí)升級(jí)硬件設(shè)備,提高提高網(wǎng)速吧。

程序?qū)懙挠悬c(diǎn)亂,隨時(shí)修改ing。

#!/usr/bin/env python3# encoding: utf-8 from splinter.browser import Browserimport time #12306的賬號(hào),密碼user_name = 'xxxxxxxxxx' #自行修改pass_word = 'xxxxxxxxxx' # 通過splinter,登錄12306網(wǎng)站(登錄驗(yàn)證碼需要手動(dòng)驗(yàn)證)b = Browser(driver_name = 'firefox') # 設(shè)置火狐瀏覽器b.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 打開12306界面b.find_by_id(u'login_user') # 點(diǎn)擊登錄按鈕 b.fill('loginUserDTO.user_name',user_name) # 填寫賬號(hào)b.fill('userDTO.password',pass_word) # 填寫密碼 # 手動(dòng)填寫驗(yàn)證碼并登錄,登錄成功后等待自動(dòng)跳轉(zhuǎn)到購票頁面。'''跳轉(zhuǎn)頁面過程中:程序可能會(huì)報(bào)錯(cuò):[WinError 10053] 您的主機(jī)中的軟件中止了一個(gè)已建立的連接。原因:未知解決辦法:寫一個(gè)循環(huán),程序不停的嘗試鏈接跳轉(zhuǎn)頁面(總會(huì)成功),成功后跳出循環(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信息,查詢余票。(自動(dòng)添加出發(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() # 重新加載cookiesb.find_by_text(u'查詢').click() #點(diǎn)擊查詢 # 添加車次類型l = ['GC-高鐵/城際','D-動(dòng)車','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)站會(huì)自動(dòng)勾選<自動(dòng)提交>、<自動(dòng)查詢>功能。  <自動(dòng)查詢> 默認(rèn)的是5秒刷新一次(慢),所以我們要關(guān)閉此選項(xiàng),提高刷新頻率。  '''  seat =['二等座','軟臥','硬臥','硬座','無座'] #設(shè)置一個(gè)坐席列表  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'開啟自動(dòng)查詢').click()# 點(diǎn)擊關(guān)閉<自動(dòng)查詢>選項(xiàng)(慢)。關(guān)閉自動(dòng)查詢功能后,自動(dòng)提交功能也會(huì)關(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() # 點(diǎn)擊查詢      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ù)訂>元素的列表,其中有些可以點(diǎn)擊‘預(yù)訂'購票,有些‘預(yù)訂'顯灰色無票狀態(tài),無法點(diǎn)擊預(yù)訂購票的。          if i.has_class('btn72'): #篩選<預(yù)訂>元素,區(qū)分可以點(diǎn)擊預(yù)訂的和不可以點(diǎn)擊的(可以點(diǎn)擊<預(yù)訂>的元素,都包含屬性class('btn72'))            i.click()#點(diǎn)擊預(yù)訂購票                      if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_hearder"]') == True: #可能會(huì)彈窗提示:當(dāng)前時(shí)間不可預(yù)訂              b.find_by_xpath('//*[@id="gb_closeDefaultWarningWindowDialog_id"]').click() # 關(guān)閉提示彈窗              print('當(dāng)前時(shí)間不可預(yù)訂,請關(guān)閉程序稍后再運(yùn)行。')              break             if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_title"]') == True: #可能會(huì)彈窗提示:您選擇的列車距開車時(shí)間很近了,請確保有足夠的時(shí)間抵達(dá)車站,并辦理換取紙質(zhì)車票、安全檢查、實(shí)名制驗(yàn)證及檢票等手續(xù),以免耽誤您的旅行。              b.find_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click() #關(guān)閉彈窗(注意:關(guān)閉彈窗,但是仍然會(huì)購票)                        b.find_by_text(u'xxx')[1].click() #自行添加乘車人名字(注意:登錄賬號(hào)本人的名字元素可能會(huì)有兩個(gè)(一個(gè)賬號(hào),一個(gè)乘車人),注意區(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('暫時(shí)沒票,繼續(xù)查詢中...')      else:        print('暫時(shí)沒票,繼續(xù)查詢中...')          except:      print('不可預(yù)訂,請稍后再次運(yùn)行程序...')      break  if __name__ == '__main__':  Train_ticket_purchase()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久日韩| 男女羞羞视频在线免费观看 | 欧美一级做一a做片性视频 日韩黄色片免费看 | 国产午夜探花 | 日韩激情在线视频 | 激情久久一区二区 | 99这里精品 | 免费观看的毛片手机视频 | 精品国内视频 | 一级黄色电影网站 | 精品国产一区二区三区在线观看 | 国产精品视频中文字幕 | 欧美亚洲综合在线 | 鲁丝一区二区三区不属 | 91综合在线观看 | 91精品国产一区二区在线观看 | 毛片福利 | 亚洲精品wwww | 欧美一区在线观看视频 | 久久久久久久久久久久久九 | 欧美一区黄色 | 久久久精品视 | 欧美a∨一区二区三区久久黄 | 新久草视频 | 久久久精品视频国产 | 黄色网址在线视频 | 黄色片免费在线 | 成人一区二区在线观看视频 | 激情宗合网 | 日韩精品hd | 在线1区| 国产精品久久久久久久久久免 | 免费在线观看成人av | 欧美韩国日本在线 | 欧美毛片 | av免费在线免费观看 | 国产精品伦视频看免费三 | 成人午夜在线免费观看 | 成人在线视频免费观看 | 欧美福利视频一区二区三区 | 色妹子久久 |