Linux無圖形介面環境使用Python+Selenium實踐 (轉載)

rebeca8發表於2024-12-04

原文連結: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雲主機場景,實現自動化測試或者網頁資料抓取。這些工具的組合提供了一個可靠且高效的解決方案。

相關文章