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

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

 更新時(shí)間:2018年09月25日 16:39:09   作者:kun_dl  
這篇文章主要為大家詳細(xì)介紹了python+splinter實(shí)現(xiàn)12306網(wǎng)站刷票并自動(dòng)購票流程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

程序?qū)懙挠悬c(diǎn)亂,隨時(shí)修改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)站(登錄驗(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) # 填寫賬號
b.fill('userDTO.password',pass_word) # 填寫密碼
 
# 手動(dòng)填寫驗(yàn)證碼并登錄,登錄成功后等待自動(dòng)跳轉(zhuǎn)到購票頁面。
'''
跳轉(zhuǎn)頁面過程中:
程序可能會報(bào)錯(cuò):[WinError 10053] 您的主機(jī)中的軟件中止了一個(gè)已建立的連接。
原因:未知
解決辦法:寫一個(gè)循環(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信息,查詢余票。(自動(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() # 重新加載cookies
b.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)站會自動(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)提交功能也會關(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: #可能會彈窗提示:當(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: #可能會彈窗提示:您選擇的列車距開車時(shí)間很近了,請確保有足夠的時(shí)間抵達(dá)車站,并辦理換取紙質(zhì)車票、安全檢查、實(shí)名制驗(yàn)證及檢票等手續(xù),以免耽誤您的旅行。
              b.find_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click() #關(guān)閉彈窗(注意:關(guān)閉彈窗,但是仍然會購票)
            
            b.find_by_text(u'xxx')[1].click() #自行添加乘車人名字(注意:登錄賬號本人的名字元素可能會有兩個(gè)(一個(gè)賬號,一個(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()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python rsa-oaep加密的示例代碼

    python rsa-oaep加密的示例代碼

    這篇文章主要介紹了python rsa-oaep加密示例的示例代碼,幫助大家更好的利用python加解密,感興趣的朋友可以了解下
    2020-09-09
  • python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型

    python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型

    這篇文章主要介紹了python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 使用python對excle和json互相轉(zhuǎn)換的示例

    使用python對excle和json互相轉(zhuǎn)換的示例

    今天小編就為大家分享一篇使用python對excle和json互相轉(zhuǎn)換的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 利用python3篩選excel中特定的行(行值滿足某個(gè)條件/行值屬于某個(gè)集合)

    利用python3篩選excel中特定的行(行值滿足某個(gè)條件/行值屬于某個(gè)集合)

    這篇文章主要給大家介紹了關(guān)于利用python3篩選excel中特定的行(行值滿足某個(gè)條件/行值屬于某個(gè)集合)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python List cmp()知識點(diǎn)總結(jié)

    Python List cmp()知識點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于Python List cmp()用法相關(guān)知識點(diǎn),有需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • Python使用背景差分器實(shí)現(xiàn)運(yùn)動(dòng)物體檢測

    Python使用背景差分器實(shí)現(xiàn)運(yùn)動(dòng)物體檢測

    目前,許多運(yùn)動(dòng)檢測技術(shù)都是基于簡單的背景差分概念的,因此本文將基于背景差分器(MOG背景差分器和KNN背景差分器)來實(shí)現(xiàn)運(yùn)動(dòng)物體的檢測,感興趣的可以了解一下
    2022-02-02
  • 使用Python實(shí)現(xiàn)發(fā)送郵件的常用方法小結(jié)

    使用Python實(shí)現(xiàn)發(fā)送郵件的常用方法小結(jié)

    在日常工作中,我們可能經(jīng)常會用到發(fā)送郵件,但如果每次都人工來發(fā)送,那豈不是很麻煩,今天我們就來講解下如何通過python語言來優(yōu)雅地發(fā)送郵件
    2024-04-04
  • 使用Folium在Python中進(jìn)行地圖可視化的操作指南

    使用Folium在Python中進(jìn)行地圖可視化的操作指南

    在數(shù)據(jù)分析和可視化領(lǐng)域,地圖可視化是一項(xiàng)非常重要的技能,它能夠幫助我們更直觀地理解和展示地理空間數(shù)據(jù),Folium是一個(gè)基于Python的地圖可視化庫,本文將詳細(xì)介紹如何使用Folium在Python中進(jìn)行地圖可視化,需要的朋友可以參考下
    2025-03-03
  • Python爬蟲突破反爬蟲機(jī)制知識點(diǎn)總結(jié)

    Python爬蟲突破反爬蟲機(jī)制知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于Python爬蟲突破反爬蟲機(jī)制知識點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-11-11
  • Python 繪制?;鶊D全面解析

    Python 繪制?;鶊D全面解析

    桑基圖,即?;芰糠至鲌D,也叫?;芰科胶鈭D。它是一種特定類型的流程圖,圖中延伸的分支的寬度對應(yīng)數(shù)據(jù)流量的大小,通常應(yīng)用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。試了一下用python畫桑基圖,在這里整理了一下分享給大家
    2021-09-09

最新評論

两当县| 松江区| 兖州市| 中山市| 视频| 嵊州市| 重庆市| 宁蒗| 蓬溪县| 新乐市| 高邮市| 赞皇县| 毕节市| 南华县| 陇西县| 陆川县| 蛟河市| 九寨沟县| 泾阳县| 琼中| 精河县| 祁阳县| 深圳市| 偏关县| 息烽县| 临汾市| 亚东县| 隆回县| 文成县| 六盘水市| 江油市| 沈丘县| 竹山县| 云林县| 玉屏| 安远县| 同江市| 岚皋县| 华安县| 应用必备| 铜山县|