自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自動搶票之 12306 搶票篇

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

[[412981]]

本文轉(zhuǎn)載自微信公眾號「Python技術(shù)」,作者派森醬。轉(zhuǎn)載本文請聯(lián)系Python技術(shù)公眾號。

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

查詢車票

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

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

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

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

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

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

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

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

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

找到車次所在的行,點擊預(yù)定

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

  1. # 是否進(jìn)入預(yù)訂頁面 
  2. while self.driver.current_url == ticket_url: 
  3.     self.wait.until(self.findElement(By.LINK_TEXT, '查詢')).click() 
  4.     time.sleep(2) 
  5.     try: 
  6.         a = self.driver.find_element_by_xpath("//tr[@datatran='K1511']/preceding-sibling::tr[1]/child::node()[last()]/a"
  7.         if a.text == '預(yù)訂'
  8.             break 
  9.     except Exception as e: 
  10.         print("沒有車次"
  11.      
  12.     a.click() 

預(yù)訂

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

  1. passengers = ['xxx'
  2. ticketType = ['成人票'
  3. seatType = ['硬座(¥28.5)'
  4. for index, p in enumerate(passengers, 1): 
  5.     self.driver.find_element_by_xpath("//label[text()='"+p+"']/preceding-sibling::input[1]").click() 
  6.      
  7.      
  8.     selectTicketType = Select(self.driver.find_element_by_id('ticketType_' + str(index))) 
  9.     selectTicketType.select_by_visible_text(ticketType[index - 1]) 
  10.      
  11.     selectSeatType = Select(self.driver.find_element_by_id('seatType_' + str(index))) 
  12.     selectSeatType.select_by_visible_text(seatType[index - 1]) 
  13.      
  14.     self.driver.find_element_by_id('submitOrder_id').click() 
  15.      
  16.     self.driver.find_element_by_id('qr_submit_id').click() 

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

總結(jié)

 

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

 

責(zé)任編輯:武曉燕 來源: Python技術(shù)
相關(guān)推薦

2013-01-17 10:49:42

2014-01-03 09:15:39

12306搶票360

2014-12-22 11:07:18

12306

2018-02-07 17:12:00

2019-01-09 09:35:41

搶票Python軟件

2013-09-12 11:14:52

假冒1230612306

2013-09-12 11:17:02

2013-12-09 14:21:45

12306搶票瀏覽器

2013-01-22 09:31:33

2018-01-10 15:23:09

2019-12-30 07:00:51

技術(shù)研發(fā)系統(tǒng)

2018-10-23 11:16:59

12306思路余票

2019-09-08 23:00:19

GitHub代碼開發(fā)者

2013-01-22 17:10:42

瀏覽器技術(shù)解析

2018-01-26 10:31:11

搶票軟件公平

2013-09-12 10:50:13

獵豹瀏覽器12306搶票軟件

2013-01-16 09:15:05

2013-01-21 16:02:29

Chrome搶票

2013-01-16 11:42:16

2018-02-06 10:37:53

點贊
收藏

51CTO技術(shù)棧公眾號