如果你不會寫程式,可以匯錢給我下載執行檔。目前是套用在 Firefox瀏覽器,如果你是chrome瀏覽器的愛好者請參考這一篇:Selenium 使用 Chrome 瀏覽器 webdriver
https://stackoverflow.max-everyday.com/2018/03/selenium-chrome-webdriver/
使用Firefox 搶票的執行畫面:拓元售票系統使用Firefox+Max自動搶票機器人(2018/11/29)
https://www.youtube.com/watch?v=umjVjW0b4cc
附註:使用 Firefox + webdriver 時會造成 javascript 的彈出式詢問對話框(confirm dialog) 無法正常使用,請點選「訂單查詢」在第2個分頁裡去取消或結帳。
接下來的步驟是寫給想要「練功」或「有一些電腦基礎」而且有辦法在「命令提示字元」(Windows平台)或的終端機(Linux/Mac平台)執行指令的人。
Step 1:要安裝 python
附註1:如果是 Linux 或 MacOS 平台,可以略過 Step1,因為內建就有 python, python2 或 python3 都可以,不限定版本。
附註2:除了python 如果你懂其他程式語言(例如:java)也可以實作,不限於python程式語言,大同小異)
Step 2:要安裝 pip
附註:這個太簡單,如果你的電腦裡沒有pip 指令,自行google 看看如何安裝。
Step 3:安裝selenium套件,請執行指令:
pip install selenium
如果在 Linux 或 MacOS 平台裡執行pip install 失敗,請先pip install virtualenv. 我自己本身是使用 macOS, 一開始是無法安裝,使用 virtualenv,是一定可以跑,後來不知道修改到什麼,變成不用進入 venv 環境裡也可以直接執行。
如果是 Windows平台,請直接跳到 Step 4.
virtualenv 基礎教學:
http://docs.python-guide.org/en/latest/dev/virtualenvs/
Step 4:下載 geckodriver (WebDriver for Firefox)
geckodriver 下載頁面:
https://github.com/mozilla/geckodriver/releases
附註1:geckodriver 目前有支援 Linux 64bit / macOS 64bit / Windows 32bit (64bit 也可以執行 32bit程式) / Windows 64bit 等版本。Linux 是有推出 32bit 的,但這個年代幾乎沒有人再去安裝 32bit 的作業系統了。
太舊的 Firefox 執行起來會有問題,請先更新Firefox瀏覽器為最近的版本。
附註:firefox 有分 32bit 和 64bit, 請下載正確的版本,要知道firefox 的版本在「說明」-「關於FireFox」裡可以看到。
完成 step 3 的 selenium 的安裝,和 step 4 下載geckodriver 之後,先試看看這個sample code:
from selenium import webdriver # for selenium 4 from selenium.webdriver.chrome.service import Service driverpath = "/Users/max/Documents/chromedriver" firefox_service = Service(driverpath) driver = webdriver.Firefox(service=firefox_service) driver.get("http://tw.yahoo.com/")
說明1:這個driverpath 路徑請換成您電腦實際下載的資料夾。
說明2:這個範例會開一個新的 Firefox 視窗並連到網址 http://tw.yahoo.com/
附註:目前的範例是透過 python 去控制 selenium + geckodriver,如果你懂其他的程式語言,也是可以實作的出來,異曲同工。
範例 2 號:
from selenium import webdriver # for selenium 4 from selenium.webdriver.chrome.service import Service driverpath = "/Users/max/Documents/chromedriver" firefox_service = Service(driverpath) driver = webdriver.Firefox(service=firefox_service)
driver.get('http://www.cwb.gov.tw/V7/') driver.set_window_position(0,0) #瀏覽器位置 driver.set_window_size(700,700) #瀏覽器大小 driver.find_element_by_link_text('天氣預報').click() #點擊頁面上"天氣預報"的連結
因為 webdriver 的使用方式相同,所以接下來的介紹請參考這一篇:
https://stackoverflow.max-everyday.com/2018/03/selenium-chrome-webdriver/
現在已經來到 selenium 4.0 之後的版本,網路上部份舊版的範例是使用 executable_path 參數,會顯示提示的訊息說直接使用上面的範例可能會顯示錯誤訊息,因為 selenium 需要傳遞 service :
DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Firefox(executable_path=driver_path)