如何用虛擬主機搶拓元的門票

  • 目前搶票機制,就是在比誰的網路快、電腦配備好、手速快,或是在比誰的機器人跑的快。期待未來熱門演唱會可以使用「實名制」+「抽籤制」,來讓更多民眾可以公平地購買到門票。
  • 文創法第十條中的「不正方式」由於沒有明確定義,代表的是所有軟體都涉嫌違反。故在此呼籲大家,勿以身試法。
  • 使用機器人搶票有被官方鎖帳號的風險,請評估後再進行使用,後果請自行承擔。
  • 以下文章出現的「搶票」指的是「非台灣的藝文活動或車票」。

使用虛擬主機搶票好處很多, 不會遇到太多相同來源IP addres 造成的拓元售票網站的 403 錯誤, 而且網路的反應時間比用台灣的網路還更短, 最有機會買到票的方式, 應該就是用虛擬主機來搶票了。

最佳的解法之一是:租用位於美國東部的虛擬伺服器, 在Linux虛擬主機上安裝遠端桌面, 連進虛擬主機後安裝 chrome 瀏服器, 然後再執行python指令, 就可以在遠端伺服器上搶票。

透過 whois ip, 或 ip location 的服務, 我們可以知道拓元的網頁伺服器目前是在美國的 Ohio(俄亥俄州), 在搶票的連線, 如果與伺服器之間的距離愈短, 通常反應時間會較短, 自然搶到票機率就會更高。

要增加搶到票的機率除了硬體上的執行時間更短之外,使用多個帳號來搶票,也可以有效提升搶到票的機率。

建議使用真實資料多註冊一些帳號來搶票,因為拓元系統在同一個帳號多開,只能搶到一組的票,大多活動都有限制單一場次單一帳號的購票數上限。如果使用多個帳號同時下去搶,萬一都有搶到,還可以選擇位置較前的區域來結帳。

雖然這篇文章是以虛擬主機來示範,但是在 Windows / macOS / Linux 平台裡的 python 操作方式是類似的,幾乎相同。

文章的目錄


虛擬主機執行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&section=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 腳本下載。

有原始碼之後, 請在 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, 所以我最後使用的指令是:

python3.9 -m pip install -r requirement.txt

說明: 建議把 python3 這個指令的 symbol link 指到你目前習慣使用的 python 版本, 這句話太難, 一般不是讀資訊的人應該比較難理解, 我是沒去修改,這句話看不懂,可以直接跳過,不影響操作。

這樣子,前置工作就都準備好了。

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

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 路徑較短的虛擬主機, 在主機上搶票效果就會很好。


相關網頁

台灣:

香港:

韓國:

其他:

Facebook網友回應

您可能也會感興趣的文章...

《在成為殭屍前要做的100件事》第7集讀後感:想做與應該做的事情

生活小事

分享動漫《殭屍100》第7集 Max 的心得,這集的重點在講2件事: 第7集傳送門: 動漫簡介 《殭屍100~在成為殭屍前要做的100件事~》(日語:ゾン100~ゾンビに […]

Read More

LINE 免費貼圖 2017-08-15

生活小事

from: https://www.facebook.com/stickerline555/ LINE 免費貼圖 2017-08-15, 台灣小學課本的貼圖滿好看的。日本 […]

Read More

如何在經濟日報多讀一個段落的免費文章

生活小事

在網路上看免費的新聞時逛到經濟日報的網站,很好奇被彈出的區塊下隱藏的句子寫了什麼。 使用工具: 瀏覽器的擴充元件 Adblock Plus. 使用方法: 只要在 Adbl […]

Read More

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *