原文連結:https://developer.aliyun.com/article/1511623
簡介: 在Linux上使用Selenium和Python來控制瀏覽器進行自動化測試或者網頁資料抓取是常見的需求。本文將介紹如何在Linux無圖形介面環境下使用Selenium與Firefox瀏覽器以headless模式執行,並提供geckodriver、Xvfb和pyvirtualdisplay等工具的安裝步驟。
Selenium是一個自動化測試工具,它可以模擬使用者在瀏覽器中的操作,例如點選、輸入文字、驗證元素等。selenium官網介紹:
Home: | https://selenium.dev |
GitHub: | https://github.com/SeleniumHQ/Selenium |
PyPI: | https://pypi.org/project/selenium/ |
IRC/Slack: | Selenium chat room https://www.selenium.dev/support/#ChatRoom |
selenium支援多種瀏覽器/驅動程式(Firefox,Chrome,Internet Explorer)以及遠端協議。下表是各瀏覽器對應的驅動。
Chrome | https://chromedriver.chromium.org/downloads |
Edge | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox | https://github.com/mozilla/geckodriver/releases |
Safari | https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
本篇以Firefox為例
-- 先安裝geckodriver:
geckodriver是Firefox瀏覽器的驅動程式,用於與Selenium通訊。可以透過以下步驟在Linux上安裝geckodriver。訪問geckodriver的GitHub頁面https://github.com/mozilla/geckodriver/releases,下載適合您系統的壓縮包。如果使用其他瀏覽器對應上表下載對應瀏覽器驅動。
解壓下載的檔案,並將geckodriver可執行檔案所在的目錄加入系統的PATH變數。
或者直接move到bin目錄:mv geckodriver /usr/bin
-- 安裝firefox
yum install gtk3
wget http://releases.mozilla.org/pub/firefox/releases/116.0.3/linux-x86_64/zh-CN/firefox-116.0.3.tar.bz2
tar jxpvf firefox-116.0.3.tar.bz2
sudo ln -s /root/firefox/firefox /usr/bin/firefox
-- 安裝selenium
在python環境下安裝:pip install selenium
-- 安裝Xvfb
Xvfb是一種虛擬的X視窗伺服器,可以模擬圖形介面。
Ubuntu使用以下命令安裝Xvfb: sudo apt-get install Xvfb
如果是centos:
sudo yum search Xvfb
根據搜尋結果找到合適的安裝包,通常命名為xorg-x11-server-Xvfb
sudo yum install xorg-x11-server-Xvfb.x86_64
-- 安裝pyvirtualdisplay
pyvirtualdisplay是一個Python庫,用於在無圖形介面環境下觸發Xvfb。
使用以下命令安裝pyvirtualdisplay:
pip install EasyProcess
pip install xvfbwrapper
pip install pyvirtualdisplay
-- 編寫Python指令碼測試
現在可以編寫一個Python指令碼來使用Selenium和Firefox瀏覽器進行自動化測試或網頁資料抓取。以下是一個簡單的示例:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from pyvirtualdisplay import Display
# 建立一個虛擬顯示
display = Display(visible=0, size=(1280, 768))
display.start()
# 配置Firefox選項
firefox_options = Options()
firefox_options.headless = True # 以headless模式執行,具體程式碼如下:
# 建立Firefox
browser = webdriver.Firefox(options=firefox_options)
# 在這裡編寫您的程式碼,例如訪問網頁、操作元素等
query = 'Selenium的使用'
url = f"https://cn.bing.com/search?q={query}"
browser.get(url)
title = browser.title
print("Page title: ", title)
browser.save_screenshot('screenshot1.png')
# 關閉WebDriver和虛擬顯示
browser.quit()
display.stop()
在這個示例中,我們首先建立一個虛擬顯示,然後配置Firefox選項,將其設定為headless模式。然後,建立一個Firefox WebDriver例項,透過它可以直接與瀏覽器進行互動。在最後,關閉WebDriver和虛擬顯示。
儲存Python指令碼嘗試執行。可以看到瀏覽器訪問bing搜尋頁面的title,同時生成了搜尋頁面的螢幕截圖。
以headless模式執行selenium,可以不顯示瀏覽器視窗,適合Linux雲主機場景,實現自動化測試或者網頁資料抓取。這些工具的組合提供了一個可靠且高效的解決方案。