<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自動搶票之 12306 搶票篇

          共 3499字,需瀏覽 7分鐘

           ·

          2021-07-28 09:50

          文 | 某某白米飯

          來源:Python 技術(shù)「ID: pythonall」

          大家好,這一篇是 12306 的自動預訂車票篇,前篇已經(jīng)擼完了 12306 的自動登錄。小編希望小伙伴們能多給幾個贊,以示鼓勵。

          查詢車票

          首先 selenium 打開到 https://kyfw.12306.cn/otn/leftTicket/init 購票查詢車票頁面。這個頁面只有 2 個需要要模擬人工的操作:

          1. 填寫 出發(fā)地、目的地、出發(fā)日,點擊查詢按鈕

          12306 的出發(fā)地、目的地、出發(fā)日的文本框用下面的代碼自動寫入似乎是沒什么作用的。

          ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
          self.driver.get(ticket_url)
          self.wait.until(self.findElement(By.ID, 'fromStationText')).send_keys('上海')
          self.wait.until(self.findElement(By.ID, 'toStationText')).send_keys('常州')
          self.wait.until(self.findElement(By.ID, 'train_date')).send_keys('2021-07-23')
          self.wait.until(EC.visibility_of_element_located((By.LINK_TEXT, '查詢'))).click()

          只能另辟蹊徑了。在頁面將目的地、出發(fā)地、出發(fā)日 填入,點擊查詢查詢,驚喜的發(fā)現(xiàn)在 F12 控制面板下 cookie 中存放了日期值。

          可是沒有看到出發(fā)地和目的地的漢字,猜測可能這些漢字被編碼過了,在編碼網(wǎng)站解析一番。

          于是就可以照貓畫虎將編碼過的目的地、出發(fā)地、出發(fā)日設置到 cookie 中,并刷新頁面。

          self.driver.add_cookie({'name''_jc_save_fromStation''value''%u5E38%u5DDE%2CCZH'}) #常州
          self.driver.add_cookie({'name''_jc_save_toStation''value''%u4E0A%u6D77%2CSHH'}) #上海
          self.driver.add_cookie({'name''_jc_save_fromDate''value''2021-08-02'})
          self.driver.refresh()
          # 一個溫馨提示彈窗
          self.wait.until(self.findElement(By.LINK_TEXT, '確認')).click()

          self.wait.until(self.findElement(By.LINK_TEXT, '查詢')).click()

          這時就將車票刷新出來了。

          1. 找到車次所在的行,點擊預定

          這里用 XPath 語法找到車次所在的預訂單元格,用判斷瀏覽器地址是否改變的方式判斷是否進入到預訂頁面。

          # 是否進入預訂頁面
          while self.driver.current_url == ticket_url:
              self.wait.until(self.findElement(By.LINK_TEXT, '查詢')).click()
              time.sleep(2)
              try:
                  a = self.driver.find_element_by_xpath("http://tr[@datatran='K1511']/preceding-sibling::tr[1]/child::node()[last()]/a")
                  if a.text == '預訂':
                      break
              except Exception as e:
                  print("沒有車次")
              
              a.click()

          預訂

          在預訂頁面就簡單了,只需要選擇乘車人和票種、席別。將這些信息定義在數(shù)組中,有幾個乘車人就定義幾個數(shù)組元素。

          passengers = ['xxx']
          ticketType = ['成人票']
          seatType = ['硬座(¥28.5)']
          for index, p in enumerate(passengers, 1):
              self.driver.find_element_by_xpath("http://label[text()='"+p+"']/preceding-sibling::input[1]").click()
              
              
              selectTicketType = Select(self.driver.find_element_by_id('ticketType_' + str(index)))
              selectTicketType.select_by_visible_text(ticketType[index - 1])
              
              selectSeatType = Select(self.driver.find_element_by_id('seatType_' + str(index)))
              selectSeatType.select_by_visible_text(seatType[index - 1])
              
              self.driver.find_element_by_id('submitOrder_id').click()
              
              self.driver.find_element_by_id('qr_submit_id').click()

          到這里就可以使用手機支付火車票了。

          總結(jié)

          兩篇文章寫完了 12306 的搶票軟件,大伙們只需要按照自己的需稍微的修改一下腳本,就可以在逢年過節(jié)搶搶搶了。

          PS公號內(nèi)回復「Python」即可進入Python 新手學習交流群,一起 100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          代碼獲取方式

          識別文末二維碼,回復:210726


          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  奇米影视7777狠狠狠狠色 | 看日屄视频 | 日韩日批网站 | 免费A片在线免费观看 | 超碰碰免费网站 |