亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python搶票程序優化,可以選擇車次和座次

發布時間:2020-08-13 22:59:47 來源:ITPUB博客 閱讀:246 作者:zone7 欄目:編程語言

Python搶票程序優化,可以選擇車次和座次



   閱讀文本大概需要 5 分鐘。

pk 哥在元旦前寫了一篇關于自動化搶票的程序 用Python搶火車票加郵件通知,同時建了一個火車票助力群,本來只是寫著玩玩,增加搶票的另一種途徑而已。沒想到短短幾天,群里加了將近 150 名小伙伴,這也預示春節的火車票真是一票難求啊。pk 哥寫這個程序的初衷是因為去年我的返程票是通過手動不停的刷新點擊搶到的,我想著能不能通過程序自動化去刷新并點擊搶票,所以就有了這個 Python 搶票程序。

畢竟這個程序是 Python 模擬手工去操作瀏覽器的,所以會因為各種網絡或者其他因素導致程序終止,群里反饋最多的就是增加車次選擇功能和座次選擇功能。本文主要講解這兩個優化點,群里也有很多小白也在用這個程序,所以本文會對一些詳細的參數配置進行說明。

自動搶票流程

首先,梳理下本次優化后的搶票流程。

  1. 自動啟動瀏覽器,自動化輸入程序里設置好的 12306 的登錄賬號和密碼。

  2. 自己手動輸入驗證碼,圖形驗證碼設別功能太復雜,涉及到人工智能的圖像識別,自己做的話成功率不高,所以我這里讓大家手動輸入,輸入驗證碼后手動點擊「登錄」按鈕

  3. 登錄成功后頁面會自動校驗,確認登錄成功后會自動跳轉到查票頁面。根據自己程序代碼里輸入的出發地和目的地進行查票。

  4. 根據自己輸入的車次進行查詢右邊「預定」按鈕是否高亮可點,不可點的話會一直點擊「查詢」按鈕不斷的刷新頁面直到出現有票點擊「按鈕」按鈕。

  5. 提交訂單頁面,選擇乘客,選擇座位類型,如果沒有自己想要的類型,比如,二等座,頁面會重新回到火車票查詢頁面,重新查詢,如此循環。

  6. 搶到你想要的票后,提交訂單,發送郵件,完成!

登錄頁面

這部分我把瀏覽器窗口最大化了,之前沒設置全屏,大家電腦顯示屏大小不一樣,可能出現有些元素被遮擋無法點擊。

登錄之后可能會出現網絡可能出現的問題的提示,估計是服務器的問題,這時手動點一下左上角的返回,一般就可以恢復正常,如果點一次還是這個提示,那就點兩次吧。

Python搶票程序優化,可以選擇車次和座次

查詢頁面

查詢火車票頁面,這個頁面峰值時間時也會出現超時的提示,估計是訪問的人數過多導致服務器異常導致的,有時候很快就能查到票,具體什么時候我也沒找到規律。

Python搶票程序優化,可以選擇車次和座次

這個我們也無法避免,程序會自動的幫我們刷新直到刷新出有票的頁面,刷新頻率:1 秒/次。

車次選擇功能是大家比較關心的功能,之前是 order = 0 默認是全部車次,這次大家可以根據車次的位置輸入相應的數字,比如要預定的車在第 5 行,你把 order = 5 就行,關于這些參數配置,下面會專門給大家列出來。

提交訂單頁面

提交訂單頁面程序會做兩件事,第一個是根據你輸入的乘客姓名進行選擇,第二件事是根據是輸入的座次進行判斷,你想要的座次有票的話就會選擇并提交訂單,你想要的座次沒票的話就會返回到上一級頁面,重復查詢車票,檢查座次,如此循環,直到訂到你想要的票。

Python搶票程序優化,可以選擇車次和座次

郵件通知

郵件通知功能之前單獨有寫過一篇文章,大家如果不確定郵件通知功能是否有效的話可以單獨把這部分源碼拿出來,運行看看是否能發送成功,源碼在公眾號回復「郵件」獲取,關于郵件通知的文章戳這里查看 30行Python代碼實現自動收發郵件。

重要參數修改說明

重點來了,前面看不懂沒關系,想直接拿源碼運行的務必仔細看這里,拿到搶票源碼后以下事項需要注意并配置。


Python 環境配置

本次程序我用的 Python 環境是 Python 3.6 的版本,其實 3.5 以上的應該都可以。官網上下載 Python3 的安裝包,安裝時記得勾選 Add Python 3.x to PATH 這個選項,勾選這個選項的好處是安裝完成后它會自動幫你配置環境變量,不用像安裝 Python2.x 時需要手動去配置。接下來都是傻瓜式安裝,安裝完成后終端下輸入 Python 顯示版本的話表示安裝成功。還不會的話建議上網查查,網上教程很多。

Python搶票程序優化,可以選擇車次和座次


pip 工具

pip 是通用的 Python 庫管理工具,使用 pip 很方便的安裝、管理庫。第一步完成后這個 pip 工具是自帶的,你可以在終端下輸入 pip list 命令查看你當前安裝的所有 Python 庫。

Python搶票程序優化,可以選擇車次和座次


安裝導入相應的庫

本程序主要用到的庫是 splinter,主要用這個庫來驅動瀏覽器進行操作頁面的,用 pip 命令直接安裝。

pip install splinter

Splinter 相關的教程中文文檔地址如下,如有興趣的話可以學習一下。

https://splinter-docs-zh-cn.readthedocs.io/zh/latest/tutorial.html

安裝完成后在 IDE 中用 import 導入這個庫,如果還不能用的話記得在編輯器中安裝引入一下,我用的是 Pycharm 編輯器,在設置中引入安裝,見下圖。

Python搶票程序優化,可以選擇車次和座次

Python 發送郵件需要用到 Python 自帶的兩個模塊,smtplib 和 email。直接 import 導入,無需下載。

所以,真正需要安裝的只有 splinter 庫,其他直接導入就可用,在編輯器中導入。

from splinter.browser import Browser
from time import sleep
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header



瀏覽器驅動下載并指定路徑

這個問題大家也出現比較多,為什么要下載瀏覽器驅動呢?因為 splinter 庫的底層原理是通過 WebDriver 去驅動瀏覽器做相應的操作的,所以使用對應的瀏覽器必須要下載對應的瀏覽器驅動。我用的是 chrome 瀏覽器,所以我下載的是 chromedriver,這里還有個坑,chromedriver 和 chrome 瀏覽器有映射關系,你必須下載對應的版本。映射關系如下,大家先查看你的 chrome 瀏覽器版本,再下載對應的 chromedriver,chromedriver 下載地址點擊「閱讀原文」可查看。(左右滑動查看全部)

ChromeDriver v2.43 (2018-10-16)----------Supports Chrome v69-71
ChromeDriver v2.42 (2018-09-13)----------Supports Chrome v68-70
ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69
ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67
ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66
ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65
ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64

(Chrome 和ChromeDriver 映射表)

chromedriver 下載解壓完成后把他的路徑復制下來,替換源碼 33 行中的路徑。

Python搶票程序優化,可以選擇車次和座次


郵件通知功能設置

上面安裝了對應的庫后,需要填寫的信息如下:發件人和收件人郵箱、發件人的授權碼。所以需要修改的位置是 sendMail 函數中的 51 行和 52 行的發件人郵箱賬號和收件人郵箱賬號,61 行的發件人郵箱的授權碼。

Python搶票程序優化,可以選擇車次和座次

授權碼獲取方法參考文章 30行Python代碼實現自動收發郵件,我用的發郵件的郵箱是我的小號 QQ 郵箱,收件人郵箱是我的大號 QQ郵箱。我試了下,QQ 郵箱里發件人和收件人可以是一樣的,也就是可以自己給自己發郵件,大家自行選擇,建議先獨立把發郵件的代碼運行下,查看是否發送成功,一般運行失敗就是因為授權碼不對造成的,重新獲取一次授權碼好了。公眾號回復「郵件」獲取發郵件功能的源碼。


座次對應的數值

經過調試查看,不同的座次對應的 value 值不一樣。

Python搶票程序優化,可以選擇車次和座次

多次調試之后,我把不同座次對應的 value 值整理成了表格。

Python搶票程序優化,可以選擇車次和座次

代碼修改位置在源碼 112 行和 113 兩行,兩行都要改動,改動成你想要的座次對應的 value 就行。

12306 用戶名和 12306 登錄密碼

這兩項在 main 函數中修改成自己的就行,把源碼 114 和 145 行修改成自己的即可。

車次選擇

車次用了 order 字段來表示,
0 代表所有車次,1 表示第一行的車次,2 表示第二行的車次,以此類推。一般你輸入出發點和目的地后,所有的車次位置是固定的,你輸入你想訂的車次的位置數字即可。源碼修改位置也是在 main 函數里,第 146 行。

乘客名格式

乘客名,比如 passengers = ['XXX', 'XXX'],支持多選,注意下學生票需注明,注明方式為:passengers = ['XXX(學生)', 'XXX'],不然會報錯,源碼修改位置也是在 main 函數里,第 149 行。

乘車日期格式

乘車日期,格式為:'2019-01-28',源碼修改位置也是在 main 函數里,第 151 行。

出發地和目的地 cookie 獲取

這個由于時間問題,沒有優化,目前只能手動去查找獲取出發地和目的地,打開自己的 12306 查詢火車票頁面,輸入出發地和目的地。將頁面的調試模式打開,用快捷鍵 F12 或者鼠標右鍵「檢查」打開調試模式,選擇 Network,點擊「查詢」按鈕,這樣就能獲取對應出發地和目的地的 cookie。源碼修改位置也是在 main 函數里,第 153 行和 155 行。

Python搶票程序優化,可以選擇車次和座次

總結下,以上需要修改的地方,chromedriver 路徑:在初始化函數 init 里面、郵件通知功能收發郵箱賬號和發件人授權碼在 sendMail 函數中修改、修改對應座次 value 值在 check_ticket 函數中修改、其他信息包括:12306用戶名、12306密碼、車次選擇、乘客名、乘車日期、出發日期、出發地和目的地 cookie 值,都在源碼最下方的 main 函數中修改。

Python搶票程序優化,可以選擇車次和座次

重要說明:本程序由于時間有限,配置項也挺多的,但是為了搶到票,我們只能多嘗試一種方法了,本程序是模擬人工操作瀏覽器,還是會存在很多問題的,比如說由于網絡關系導致頁面長時間停留從而找不到元素而程序停止,其他各種預想不到的問題也會出現,程序停止的話也只能重啟下程序繼續搶,后期大家需要的話我也會慢慢優化。歡迎大家在搶票群里一起優化討論,畢竟我也要工作,個人時間有限。大家也不要把它當做唯一的搶票工具,我們還是要把其他的搶票工具一起用起來,所以我建火車票助理群的目的也是為了讓大家有更多的途徑搶到票,回家過年,大家相互點點助力,這樣搶到額概率更大一下。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高安市| 三明市| 武清区| 大竹县| 红原县| 溆浦县| 芦溪县| 高阳县| 玉溪市| 青田县| 永仁县| 玉环县| 马山县| 江源县| 佛教| 辉南县| 荣成市| 乐都县| 姜堰市| 莒南县| 中牟县| 沾益县| 沙洋县| 龙泉市| 辽中县| 鲜城| 尼玛县| 吉木萨尔县| 江华| 丹棱县| 常德市| 故城县| 玛纳斯县| 准格尔旗| 孟村| 桐柏县| 永春县| 辽源市| 商都县| 资阳市| 壶关县|