中午完成在 Mapleboard 上使用 Selenium 操控 Firefox 瀏覽器的測試並成功執行爬蟲程式後, 下午回到鄉下老家檢查 Mapleboard 的 Ubuntu Mate 有預載 Chromium 瀏覽器 (故不須再安裝), 晚飯後便來研究如何用 Selenium 操控 Chromium 瀏覽器.
1. 安裝 Chromium 瀏覽器 :
如果 Ubuntu 沒有 Chromium 的話, 可用下列指令安裝 :
sudo apt-get install chromium-browser
因 Mapleboard 的 Ubuntu Mate 出廠就有 Chromium, 所以這一步跳過,
2. 安裝 Chromium 驅動程式 :
Ubuntu 的安裝路徑是 /usr/lib/chromium-browser/chromedriver, 所以先檢查一下 :
tony1966@LX2438:~/python$ ls -ls /usr/lib/chromium-browser/chromedriver
ls: 無法存取 '/usr/lib/chromium-browser/chromedriver': 沒有此一檔案或目錄
可見 Ubuntu Mate 尚未安裝驅動程式, 安裝指令如下 :
sudo apt-get install chromium-chromedriver
tony1966@LX2438:~/python$ sudo apt-get install chromium-chromedriver
[sudo] tony1966 的密碼:
正在讀取套件清單... 完成
正在重建相依關係... 完成
正在讀取狀態資料... 完成
下列【新】套件將會被安裝:
chromium-chromedriver
升級 0 個,新安裝 1 個,移除 0 個,有 7 個未被升級。
需要下載 2,308 B 的套件檔。
此操作完成之後,會多佔用 77.8 kB 的磁碟空間。
下載:1 http://ports.ubuntu.com jammy-updates/universe arm64 chromium-chromedriver arm64 1:85.0.4183.83-0ubuntu2.22.04.1 [2,308 B]
取得 2,308 B 用了 1s (2,111 B/s)
選取了原先未選的套件 chromium-chromedriver。
(讀取資料庫 ... 目前共安裝了 289968 個檔案和目錄。)
正在準備解包 .../chromium-chromedriver_1%3a85.0.4183.83-0ubuntu2.22.04.1_arm64.deb……
解開 chromium-chromedriver (1:85.0.4183.83-0ubuntu2.22.04.1) 中...
設定 chromium-chromedriver (1:85.0.4183.83-0ubuntu2.22.04.1) ...
再次檢查安裝路徑就可以看到驅動程式了 :
tony1966@LX2438:~/python$ ls -ls /usr/lib/chromium-browser/chromedriver
0 lrwxrwxrwx 1 root root 22 Oct 18 2022 /usr/lib/chromium-browser/chromedriver -> ../../bin/chromedriver
3. 使用 Selenium 控制 Chromium 瀏覽器 :
安裝好 Chromium 驅動程式就可以來測試以 Selenium 控制瀏覽器, 因為 Selenium 是 v4.21.0, 驅動程式的路徑要用 Servive 物件來做, 語法程序與前一篇 Firefox 的差不多 :
首先匯入套件模組 :
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.firefox.options import Options
其中 Options 類別只有在要設定選項時 (例如無頭模式) 才需要匯入.
接著定義驅動程式路徑變數, 然後把它傳給 Service 類別的建構式以建立 Service 物件, 最後呼叫 webdriver.Chrome() 並傳入 Service 物件即可建立 WebDriver 物件, 同時會開啟一個 Chromium 視窗 (WebDriver 代表此瀏覽器) :
driverpath='/usr/lib/chromium-browser/chromedriver'
service=Service(driverpath)
browser=webdriver.Chrome(service=service)
如果要用無頭模式, 則要先呼叫 Options() 建構式來建立一個 Options 物件, 然後呼叫其 add_argument() 方法傳入 '--headless', 最後在呼叫 webdriver.Chrome() 傳入 Options 與 Service 物件即可 :
options=Options()
options.add_argument("--headless")
browser=webdriver.Chrome(options=options, service=service)
注意, options 必須做為第一參數. 例如 :
>>> from selenium import webdriver
>>> from selenium.webdriver.chrome.service import Service
>>> driverpath='/usr/lib/chromium-browser/chromedriver'
>>> service=Service(driverpath)
>>> browser=webdriver.Chrome(service=service)
>>> browser.get('https://tw.yahoo.com')
結果如下 :
呼叫 WebDriver 物件的 close() 方法即可關閉此 Chromium 瀏覽器 :
>>> browser.close()
參考 :
2024-07-06 補充 :
今天整理部落格文章發現, 原來我之前寫過一篇如何在樹莓派安裝 Web Driver 的文章 :
雖然 Ubuntu 與樹莓派有些不同, 還是可以作為參考.
沒有留言 :
張貼留言