- 目前搶票機制,就是在比誰的網路快、電腦配備好、手速快,或是在比誰的機器人跑的快。期待未來熱門演唱會可以使用「實名制」+「抽籤制」,來讓更多民眾可以公平地購買到門票。
- 文創法第十條中的「不正方式」由於沒有明確定義,代表的是所有軟體都涉嫌違反。故在此呼籲大家,勿以身試法。
- 使用機器人搶票有被官方鎖帳號的風險,請評估後再進行使用,後果請自行承擔。
- 以下文章出現的「搶票」指的是「非台灣的藝文活動或車票」。
使用虛擬主機搶票好處很多, 不會遇到太多相同來源IP addres 造成的拓元售票網站的 403 錯誤, 而且網路的反應時間比用台灣的網路還更短, 最有機會買到票的方式, 應該就是用虛擬主機來搶票了。
最佳的解法之一是:租用位於美國東部的虛擬伺服器, 在Linux虛擬主機上安裝遠端桌面, 連進虛擬主機後安裝 chrome 瀏服器, 然後再執行python指令, 就可以在遠端伺服器上搶票。
透過 whois ip, 或 ip location 的服務, 我們可以知道拓元的網頁伺服器目前是在美國的 Ohio(俄亥俄州), 在搶票的連線, 如果與伺服器之間的距離愈短, 通常反應時間會較短, 自然搶到票機率就會更高。
要增加搶到票的機率除了硬體上的執行時間更短之外,使用多個帳號來搶票,也可以有效提升搶到票的機率。
建議使用真實資料多註冊一些帳號來搶票,因為拓元系統在同一個帳號多開,只能搶到一組的票,大多活動都有限制單一場次單一帳號的購票數上限。如果使用多個帳號同時下去搶,萬一都有搶到,還可以選擇位置較前的區域來結帳。
雖然這篇文章是以虛擬主機來示範,但是在 Windows / macOS / Linux 平台裡的 python 操作方式是類似的,幾乎相同。
文章的目錄
- 虛擬主機執行MaxBot影片
- 虛擬主機比較快,還是自己的電腦,還是網咖的電腦?
- 如何查詢 domain name 背後的多個伺服器 IP?
- 怎麼測量與售票系統的網頁伺服器之間的距離?
- 怎麼知道虛擬伺服器的IP 是否被售票平台擋掉?
- 租用雲端運算主機的費用
- 取得 MaxBot 原始碼
- 更新 MaxBot 原始碼
- 執行 MaxBot
- 在 Linux 上執行MaxBot 常見問題
- 其他的售票系統的搶票
- 相關網頁
虛擬主機執行MaxBot
說明:
- 首先是在其他瀏覽器登入完拓元後, 取得 cookie 的 SID 值,
- 在虛擬主機的設定介面存入拓元 SID,
(指令是:python settings.py
) - 透過指令的方式執行搶票程式.
(指令是:python chrome_tixcraft.py
)
虛擬主機硬體說明:
影片的CPU 數目只有 2 CPU, 所以虛擬伺服器的CPU 選 4 CPU 應該就夠用了, 建議還是選 8 CPU, 反正才差幾塊錢, 買的到票比較重要。
如果是使用虛擬主機搶票,建議一個IP 配一個帳號,之後遇到的問題會比較少,也比較不會被官方鎖IP,反正虛擬主機花的錢很便宜,搶到票很難。
如果你希望每次開出來的瀏覽器套用到不同的IP, 參考看看這篇文章:
如何透過Python自行架設代理伺服器 (Proxy Server)
https://stackoverflow.max-everyday.com/2023/11/python-proxy-server/
虛擬主機比較快,還是自己的電腦,還是網咖的電腦?
可以測試, 在KKTIX/拓元/ibon/年代….上買票,使用搶票程式分別在不同的環境下從自動化開始到完全買票,全部所花費的時間來比較。
在MaxBot的執行視窗之中,可以看到目前瀏覽中的網址還有搶票程式除錯用的訊息,在網頁遇到售票系統的結帳的畫面時,MaxBot的執行視窗會顯示從挑日期到最後結帳花了多少時間。
雖然虛擬主機的CPU較慢,但實測花費時間較短。
測試方式: 先登入帳號後, 隨意點一個已開賣的場次, 就會看到購票所花費的時間.
以下針對同一時間,同一場次做購票測試,包括轉圈圈所花時間。虛擬主機 4 CPU 的環境,平均在 9.1 秒完成。
2 CPU 的環境,平均在 9.6秒完成。
真心建議在虛擬主機搶票的話,使用 8 CPU 來搶,效果會較好。
在古董的Windows 筆電上測試,如果多試幾次,大約可以保持在 14 秒左右,秒數被拉大的主要原因就是驗證碼遇到太難的,一但猜錯就會多花2秒左右。
古董的Windows 筆電規格:
- CPU: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.71 GHz
- RAM: 8 GB
在古董的Windows 筆電上,實測使用 python 原始碼執行搶票的速度比打包的執行檔速度快大約2秒左右,大約可以保持在 12 秒左右。
2022年買的不到台幣2萬元筆電
- CPU: 5600H with Radeon Graphics 3.30 GHz
- RAM: 8GB
- OS: Win 11
- 網路是月租費$188的手機分享的熱點
- MaxBot 版本: 2024-01-10
測試結果: 偶爾可以跑出 8.0 秒, 慢一點也有 9.6秒, 大多都維持在 8.7秒左右。
這個MaxBot 2024-01-10 版本跟上面 2023年11月份時虛擬機的版本, 加入了瀏覽器的擴充功能, 也許有機會讓電腦跑的比較快一點。用不同的 MaxBot 版本在比較, 比較的基準就不太一樣。因為懶的去重測數劇, 暫時就先這樣子吧。
網友的電腦提供的數字, 大約平均在 8.7 秒完成, 偶爾時候會出現計算錯誤的情況。
花費時間的計算是從選日期的頁面開始計算, 直接彈出有座位的畫面為止,有時候猜錯驗證碼,或伺服器轉圈圈會很久,也都包括在這個花費時間中。
如果要參加拓元的跑步比賽, 建議參賽的電腦最好是可以包含轉圈圈的花費時間在10秒內,買到票的機率會較高。
https://max-everyday.com/2023/11/buy-ticket-by-vm/#vm_vs_pc
可以用這個方式到網咖去測試看看花費時間長短,再決定是要在家裡搶票還是用網咖的電腦。
從網友留言來看, 電腦硬體到某一個等級之後, 再用更高級或更新的硬體, 跑出來的時間是差不多的, 就是8秒左右。
如何查詢 domain name 背後的多個伺服器 IP
語法:nslookup doname-name
KKTIX 似乎有 CDN 伺服器,在日本的主機查詢會連到日本的 CDN 的 web server.
在台灣查,web server 在台灣:
這樣也滿好的,使用那一個地區的虛擬主機都可以快速地連上kktix, 挑一台連到kktix 反應時間短的就可以了。
日本的虛擬主機連到kktix 的速度(traceroute):
server-99-84-133-97.nrt57.r.cloudfront.net (99.84.133.97) 1.931 ms 2.059 ms 2.042 ms
新加坡虛擬主機連到kktix 的速度(traceroute):
server-52-84-229-65.sin2.r.cloudfront.net (52.84.229.65) 2.499 ms 2.489 ms 2.479 ms
台灣的虛擬主機連到kktix 的速度(traceroute):
server-13-35-166-83.tpe50.r.cloudfront.net (13.35.166.83) 5.385 ms *
server-13-35-166-87.tpe50.r.cloudfront.net (13.35.166.87) 5.430 ms 5.277 ms 4.267 ms
server-13-35-166-129.tpe50.r.cloudfront.net (13.35.166.129) 5.517 ms 5.443 ms *
只差個位數的 ms, 理論上應該差異不大。
附註: KKTIX 已經比照拓元,擋掉很多虛擬主機供應商的IP address.
怎麼測量與售票系統的網頁伺服器之間的距離?
通常選擇與伺服器同一個國家, 效果應該會最好. 實際上只要反應時間愈短就是愈好.
在網路的世界裡, 有一個叫 traceroute 指令, 在 window 裡是下 tracert, 透過這個指令可以知道你目前的網路情況下, 連到伺服器中間經過了那些主機幫你接力的傳送網路封包, 以在台灣地區, 使用台灣之星的網路, 執行畫面如下:
traceroute 簡介:
https://zh.wikipedia.org/zh-tw/Traceroute
使用 digital ocean 在米國紐約市的伺服器, 雖然比不上直接使用 Amazon 虛擬主機, 數據上也很漂亮。
linode 日本連到美國, 雖然比台灣快, 但是還是慢了一些些:
在建立 Linux 的虛擬主機時, 大多建議使用 ubuntu 且有 LTS 的版本, 會遇到的問題較少一點, 不只是 ubuntu 可以用, 我是使用 Rocky Linux, 如何在 Amazon/Microsoft/DigitalOcean/Linode/TWS 的虛擬主機上安裝遠端桌面, 參考看看:
Linux VM 上安裝桌面環境
https://stackoverflow.max-everyday.com/2023/02/linux-vm-xrdp-desktop/
當然, 除了 Linux 可以選擇之外, 也有 Window 的虛擬光碟可以選擇。
幫虛擬主機開機後, 請幫主機安裝 chrome 瀏覽器, 安裝好後, 再按裝 python 3.10 或 python 3.9 在伺服器裡, 由於我選的 Rocky Linux 8.0 版太古老, 內建的python 是 3.6 , 我另外安裝了 python 3.9 版. 如果要讓 ddddocr 可以正常執行, 請使用 intel CPU + python 版本 <= 3.10.
有些人誤以為加掛proxy 一定會比較快,理論上,加掛proxy 大多數情況會變慢,因為經過的節點數增加很多。
如果你用proxy,請先看看,資料從售票網頁伺服器到你的瀏覽器中間花費多少時間,也許掛proxy了,反而更慢。
怎麼知道虛擬伺服器的IP 是否被售票平台擋掉?
只要先連進伺服器後, 下 curl + 網址的指令, 就可以知道結果, 例如:
curl https://tixcraft.com
顯示 403 Forbidden
或是 {"response":"block"}
就是被擋掉了.
Q: 我有使用虛擬主機,但 ticketmaster.sg好像封鎖了所有虛擬主機的ip,無論怎麼切換都無法進入網頁,這個有解決方案嗎?
A: 測試用digital ocean 在sg 的虛擬主機, 的確是被封了, 顯示: {"response":"block"}
, 使用 linode 虛擬主機結果也是一樣不行.
目前虛擬主機對搶票系統來看, 似乎是知名的就會被封鎖, 目前只能除了常見的這些業者, 才不會被擋掉.
台灣與大陸還是有很多雲端運算 (IaaS)的提供業者, 目前我使用中的台灣的業者並沒被被 ticketmaster.sg 伺服器封鎖.
Q: 如何選擇較佳的虛擬主機?
A: 當然是距離實際售票的主機連線反應時間愈短愈好.
以 ticketmaster.sg 伺服器在美國的加洲(California) 為例子, 雖然官方擋掉部份IP address, 但是這世界上還是有暫時沒被封鎖的虛擬主機, 可以先試看看美國業者提供的虛擬主機, 如果被封鎖, 再慢慢往外找.
Q: 是不是拓元把網站伺服器架在國外比較安全?
A: 並不是, 因為 Amazon 的雲端運算是世界第一品牌, 而且平常時不需要使用到那麼多台的網站伺服器, 就可以只開的夠用的數目做負載平衡(Load Balancing), 等有大型搶票活動, 可以動態地加開伺服器, 不需要平常時就花大錢養機器。
Server Load Balance(伺服器負載平衡),功能在於將企業內多部伺服器的負載量作平衡,將過大流量轉向相同功能的其他伺服器,讓每一部伺服器工作量維持平均,保持服務不因流量過大而變慢或中斷。
其他網友挑戰過的雲端業者:
- AWS
- Bright data
- Digital Ocean
- Kamatera
- Linode
- VLUTR
- Zenlayer
- 華為雲
- 騰訊雲
聽說這些也會被拓元擋, 實際上我沒試過.
租用雲端運算主機的費用
在 Digital Ocean 以 8 intel CPU + 16GB Ram 的主機, 1小時是 0.19 美元 等於 台幣 $6.13元, 滿便宜的, 比去網咖還便宜。
在 Linode, 以 8 intel CPU + 16GB Ram 的主機, 1小時是 0.216 美元 等於 台幣 $6.96元,
華盛頓特區在俄亥俄州的右邊, 實體距離應該也很近。
Amazon 虛擬伺服器定價:
https://aws.amazon.com/ec2/pricing/on-demand/
8 CPU + 16GB RAM, 每小時 $0.2688美金=8.66台幣.
中華電信, 台灣的南部的”運算優化型”的價格:
https://cloud.hinet.net/hicloud/index.html?type=cvpc§ion=price
8 CPU, 16GB RAM, 每小時 10.32台幣, 對Linux 不熟悉的, 可以選擇貴一倍的Window, 預算不夠多, 就選 4 CPU 版本, 價格少一半。
Q: 該選中華電信南區還是國外的虛擬主機呢?
A:要選那一台主機都可以,主機選擇,第一步是要先確定有沒有被網頁伺服器封鎖。
如果是要搶拓元家族的話,可以確定Linode/DigitalOcean 的伺服器的IP很多都被擋掉了。
第二步,才是用「網路反應」時間來決定,traceroute 遇到的節點較多的,不一定會比較差,一般的情況下,traceroute 經過的節點數目較少時,反應時間會較短。
第三步,執行瀏覽器主機的選擇,一般的情況下,虛擬主機的網路通常會比家用的網路快,家用的筆電的CPU數及硬體設備會比虛擬主機好。
建議在虛擬主機上,開分身的帳號來自動搶票。
透過原始碼在macOS 上執行MaxBot
教學影片: https://youtu.be/HpVG91j0lbI
取得 MaxBot 原始碼
安裝好 python 之後, 請下載 MaxBot 原始碼:
https://github.com/max32002/tixcraft_bot
可以直接在 github 網頁點綠色的 Code 按鈕, 下載 zip 檔, 也可以使用 git 指令來 clone(複製) 專案:
git clone https://github.com/max32002/tixcraft_bot.git
附註: 不管是 macOS 還是 Windows 預設都是沒有 git 這個指令,如果這行指令在執行後, 沒有檔案被下載, 請先安裝 git 到你的作業系統。或是使用github 網頁裡的 Download 功能把python 腳本下載。
如果遇到 github 上的網址已經變成錯誤: 404 不存在時。網路上還有其他網友的備份,在github 查詢關鍵字: tixcraft_bot 就可以看到其他 fork(分支)出來的專案。例如:
git clone https://github.com/bitties/tixcraft_bot_20241102
有原始碼之後, 請在 Terminal 裡進入 tixcraft_bot 目錄, 指令:
cd tixcraft_bot
透過瀏覽器下載 github 上的 zip 檔, 在上面進入目錄的指令, 會遇到問題, 因為「直接解壓縮」後的目錄名稱並不是 tixcraft_bot 而是 tixcraft_bot-master, 你在進入的資料夾名稱, 需要調整為你實際解壓縮後的目錄名稱。
透過瀏覽器下載 github 上的 zip 檔, 在 Windows / macOS / Linux 平台, 預設的路徑在「下載」(~/Download) 的資料夾, 你在執行的 Terminal 視窗的路徑, 與你解壓縮的路徑可能不同, 直接執行上面的指令, 會無法進入到預期的資料夾內。
安裝 python 相依的套件, 請執行以下指令:
python3 -m pip install -r requirement.txt
我使用中的虛擬主機, 無法直接執行上面的指令, 因為Linux 內建了 python 3, 而且系統內建的是 python 3.6, 所以我有另外安裝 python 3.9, 所以我最後使用的指令是:
Windows 作業系統要用 python 指令,不是 python3, macOS / Linux 作業系統由於可能有多個 python 版本的環境,所以才是使用 python3 指令。
在 Linux 環境,可能會安裝很多個版本,指令也可能變成 python3.9
python3.9 -m pip install -r requirement.txt
在 Linux 平台,建議把 python3 這個指令的 symbol link 指到你目前習慣使用的 python 版本, 上面這句話太難理解,太專業,一般不是讀資訊的人應該比較難理解,這句話看不懂,可以直接跳過,不影響操作。
在 Linux 平台, Python 替代版本,並任意切換用指令:
update-alternatives --config python
小結:取得程式碼有2種方式,1:是使用 git clone 指令,比較簡單。2:是在github點「下載」取得原始碼 zip 檔。再把 zip 解壓縮,效果就會和 git clone 指令一樣。
這樣子,前置工作就都準備好了。
Q: 取得source code後跑出來fatal: destination path ‘tixcraft_bot’ already exists and is not an empty directory.想問是什麼意思?
A: 執行 git clone 2次, 重覆取得 source code, 才會有這個問題, 如果 tixcraft_bot 目錄已經存在, 直接 cd tixcraft_bot 就可以了。
如果你想把已下載的刪除, 可以直把把 tixcraft_bot 目錄刪掉即可。
如果你想更新 source code, 可以重新下載, 或是先 cd tixcraft_bot 目錄後, 再執行 git pull , 可以更新 source code 為新的版本。
更新 MaxBot 原始碼
如果你是使用 git clone 取得程式碼的話, 應該會停留在某一個版本, 如果你想更新為最新的版本,
Step 1: 進入資料夾.
cd tixcraft_bot
如果你是用 git clone 取得程式碼,這一行指令應該不會有錯誤,但如果是透過 zip 檔並解壓縮取得程式碼,這個 tixcraft_bot 的目錄名稱可能會有差異。
cd
指令為「Change Directory」的英文縮寫,主要功能是用來「切換目錄」,也是Linux 指令操作中最常使用到的指令。
Step 2: 重設並取回最後的版本:
git reset --hard
git pull
執行 MaxBot
需要使用參數設定可以執行指令:
python setting.py
如果不使用設定界面,直接執行主程式:
python chrome_tixcraft.py
如果不使用設定界面,直接執行主程式並套用特定的設定檔:
python chrome_tixcraft.py --input settings.json
說明:
- 這裡的 python, 需要手動修改為 python3 或 python3.9 要以你的環境為準。
- 套用特定的設定檔除了可以用參數 –input 來指定之外,也可以使用有GUI介面的 config_launcher.py 來完成。
Q: 售票的主機在國外, 是不是就不適用台灣的《文創法》或《社會秩序維護法》? 因為拓元/KKTIX的主機是在美國.
在 Linux 上執行MaxBot 常見問題
原因:系統中沒有安裝 tkinter
NameError: name ‘TK’ is not defined
Fedora 的Linux平台使用查詢指令
sudo dnf list python3*
可以看到每一個python版本都有自帶的 tkinter 套件, 如果想安裝 python 3.8 版的 tkinter, 請下指令:
sudo dnf install python38-tkinter
如果是 ubuntu 平台安裝 tkinter:
sudo apt install python3-tk
On CentOS, RedHat, and Oracle Linux systems:
sudo yum install -y tkinter tk-devel
多個python3 版本, 使用 python3 指令時, 要使用那一個版本?
請使用指令來指派預設的 python3 版本,
Debian / Ubuntu:
update-alternatives --config python3
CentOS / Rocky:
alternatives --config python3
其他的售票系統的搶票
這裡的其他售票系統指MaxBot 有支援的情況下。
都比照這篇文章的解法就可以了, 先找出主機的實體位置, 或是找一台 traceroute 路徑較短的虛擬主機, 在主機上搶票效果就會很好。
相關網頁
台灣:
- Max的拓元搶票機器人
http://max-everyday.com/2018/03/tixcraft-bot/ - Max的KKTIX搶票機器人
http://max-everyday.com/2018/12/kktix-bot/ - Max的FamiTicket搶票機器人
http://max-everyday.com/2019/01/maxbot-famiticket/ - Max的ibon搶票機器人
https://max-everyday.com/2023/01/ibon-bot/
香港:
- Max的城市售票網搶票機器人
http://max-everyday.com/2019/02/urbtix-bot/ - Max的cityline搶票機器人
https://max-everyday.com/2019/03/cityline-bot/ - Max的快達票搶票機器人
https://max-everyday.com/2023/01/hkticketing-bot/
韓國:
- Max interpark 搶票機器人
https://max-everyday.com/2023/08/interpark-bot/
其他:
- Max自動掛號機器人
http://max-everyday.com/2018/08/max-auto-reg-bot/ - inline 填表單機器人
https://max-everyday.com/2022/09/inline-bot/ - [MaxBot]請問新加坡的 ticketmaster 怎麼輸入選區呢?
https://max-everyday.com/2023/10/ticketmaster-area-auto-select/ - Max 學習 selenium
http://stackoverflow.max-everyday.com/tag/selenium/ - Max搶票機器人Facebook粉絲團:
https://www.facebook.com/maxbot.ticket/ - 香港的售票網站的等待10秒後重試
https://max-everyday.com/2023/01/cityline-wait-10-seconds-retry/ - 拓元的搶票,要多少的網路頻寬才夠?
https://max-everyday.com/2023/02/how-many-band-width-you-need-to-buy-ticket/ - Max 搶票機器人的故障排除
https://max-everyday.com/2023/11/maxbot-troubleshooting/ - 搶票常見問題整理
https://max-everyday.com/2023/02/common-problem-when-you-buy-ticket/ - 如何用虛擬主機搶拓元的門票
https://max-everyday.com/2023/11/buy-ticket-by-vm/ - 如何透過Python自行架設代理伺服器 (Proxy Server)
https://stackoverflow.max-everyday.com/2023/11/python-proxy-server/