Selenium 使用 Firefox 瀏覽器 webdriver

如果你不會寫程式,可以匯錢給我下載執行檔。目前是套用在 Firefox瀏覽器,如果你是chrome瀏覽器的愛好者請參考這一篇:Selenium 使用 Chrome 瀏覽器 webdriver
http://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 的使用方式相同,所以接下來的介紹請參考這一篇:
http://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)

發佈留言

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