国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) Python教學 如何使用 systemd 將 Selenium 設定為 Linux 守護進程

如何使用 systemd 將 Selenium 設定為 Linux 守護進程

Oct 18, 2024 pm 06:17 PM

How to Set Up Selenium as a Linux Daemon with?systemd

在 ubuntu 或 debian 上設定並執(zhí)行 Chrome 和 Selenium。本指南基於 ubuntu 22.04

Selenium 非常適合自動化 Web 任務,但讓機器人在伺服器上 24/7 運行可能很棘手。透過使用 systemd,您可以將 Selenium 機器人作為後臺服務(守護進程)運行,確保其可靠運行並在失敗時重新啟動。本指南將引導您完成設定步驟,重點是針對 Linux VPS 設定它。

目錄

  1. 安裝 Google Chrome

  2. 設定虛擬環(huán)境

  3. 安裝必要的軟體包

  4. 建立 Python 腳本

  5. 設定 systemd 服務

    • 新增 ENV 變數(shù)(可選)
    • 服務文件
    • 運行服務
  6. 修補塊緩衝問題

    • 使用 -u 標誌
    • 使用列印刷新參數(shù)
  7. 使用journalctl存取日誌

  8. 參考文獻


安裝Google瀏覽器

首先,更新所有軟體包。

sudo apt update

下載穩(wěn)定的 Google Chrome 軟體包。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

安裝Google瀏覽器。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

檢查已安裝的 Google Chrome 版本。

google-chrome --version

設定虛擬環(huán)境

如果您僅在電腦上執(zhí)行 Selenium 機器人,這些步驟不是強制性的。但是,如果您正在處理其他項目或需要隔離環(huán)境,則建議您這樣做。

讓我們建立我們的虛擬環(huán)境。

python3 -m venv venv

啟動虛擬環(huán)境。

source venv/bin/activate

安裝必要的套件

現(xiàn)在,安裝 selenium 和 webdriver-manager。

pip install selenium
pip install webdriver-manager

webdriver-manger 的目的是簡化不同瀏覽器的二進位驅動程式的管理。您可以在其文件中了解更多資訊。


建立 Python 腳本

## main.py

from selenium import webdriver
## ---- Use for type hint ---- ##
from selenium.webdriver.chrome.webdriver import WebDriver
## --------------------------- ##
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager


def create_chrome_web_driver_connection(headless: bool,
                                       detach:bool,
                                       use_sandbox: bool,
                                       use_dev_shm: bool,
                                       window_width: int = 1052,
                                       window_height: int = 825
                                       ) -> WebDriver:

    service = Service(ChromeDriverManager().install())
    options = Options()
    options.add_experimental_option("detach", detach)
    options.add_argument(f"--window-size={window_width},{window_height}")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-renderer-backgrounding")
    options.page_load_strategy = 'normal'

    if not use_sandbox:
        options.add_argument('--no-sandbox')
    if not use_dev_shm:
        options.add_argument('--disable-dev-shm-usage')
    if headless:
        options.add_argument("--headless=new")

    driver = webdriver.Chrome(service= service, options=options)

    return driver



if "__main__" == __name__:
    driver =  create_chrome_web_driver_connection(headless= True,
                                                 detach= False,
                                                 use_sandbox= False,
                                                 use_dev_shm= False)

    driver.get('https://python.org')
    print(driver.title)

    driver.close()

options.add_experimental_option("detach", detach) :

  • 這可讓您設定 Chrome 瀏覽器在腳本執(zhí)行完成後是否保持開啟。
  • 如果 detach 為 True,即使 WebDriver 會話結束,瀏覽器視窗也會保持開啟。

options.add_argument(f"--window-size={window_width},{window_height}") :

  • 這會根據寬度和高度設定瀏覽器的視窗大小。

如果您願意,您可以刪除此行。
如果您打算在無頭模式下運行 Selenium,請確保以這種方式設定視窗大小;否則,根據我的經驗,預設視窗大小可能太小。

您可以使用此指令 driver.get_window_size() 檢查視窗大小

options.add_argument("--disable-extensions") :

  • 擴充功能可能會幹擾自動瀏覽器交互,因此停用它們可以提高穩(wěn)定性。

options.add_argument("--disable-renderer-backgrounding") :

  • 這可以防止 Chrome 取消優(yōu)先順序或暫停背景標籤。
  • 這在跨多個選項卡執(zhí)行操作時非常有用。

options.page_load_strategy = '正常' :

  • 這會將頁面載入策略設為正常,這表示 Selenium 將等待頁面完全加載,然後再繼續(xù)執(zhí)行進一步的命令。
  • 其他選項包括 eager(等到 DOMContentLoaded 事件)和 none(不等待頁面加載),您可以在這裡了解更多資訊。

options.add_argument('--no-sandbox') :

  • 沙箱是 Chrome 的安全功能,可隔離瀏覽器的進程。
  • 停用它(--no-sandbox)在某些測試環(huán)境中(例如,在 Docker 容器中或以 root 使用者身分執(zhí)行腳本時)非常有用,因為沙箱會導致權限問題或崩潰。

options.add_argument('--disable-dev-shm-usage') :

  • /dev/shm 是 Linux 環(huán)境中常用的共享記憶體空間。預設情況下,Chrome 會嘗試使用它來提高效能。
  • 停用此選項(--disable-dev-shm-usage)可防止共享記憶體有限的環(huán)境中發(fā)生崩潰。

options.add_argument("--headless=new") :

  • 這將啟用無頭模式,無需 GUI 即可執(zhí)行 Chrome。
  • 無頭模式對於在沒有顯示器的環(huán)境中運行非常有用,例如 CI/CD 管道或遠端伺服器。

設定係統(tǒng)服務

新增 ENV 變數(shù)(可選)

如果您的 selenium 程式需要使用環(huán)境變量,有兩種方法可以實現(xiàn)此目的:

  1. 將 .env 檔案與 python-dotenv 等函式庫一起使用(更常見/流行的方法)。

  2. 使用 systemd 的內建選項來設定環(huán)境檔案。

在此範例中,我們將使用第二個選項。

首先,讓我們在 /etc 目錄中建立一個 conf.d 目錄。

sudo apt update

接下來,建立一個純文字檔案(這將是我們的環(huán)境檔案)。

sudo apt update

現(xiàn)在您可以將環(huán)境變數(shù)新增到我們剛剛建立的檔案中。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

修改Python腳本以使用環(huán)境變數(shù)。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

服務檔案

您需要在 /etc/systemd/system/ 目錄中建立一個服務檔案;這是系統(tǒng)管理員安裝的 systemd 單元應該放置的位置。

google-chrome --version

對於此範例,我將假設您位於 VPS 中並且希望以 root 使用者身分執(zhí)行該服務。

[!警告]
該服務將以 root(管理員)權限運行。這使其能夠完全存取系統(tǒng),但除非出於安全原因,否則通常會避免以 root 身分運行。

將其新增至服務文件。

python3 -m venv venv

[單位] 部分

此部分定義服務的元資料和相依性。

Description=Selenium Bot Service:提供服務功能的簡短描述。在本例中,它將其描述為“Selenium Bot Service”。此描述用於系統(tǒng)日誌和 systemctl 來識別服務。

After=network.target:這確保服務僅在網路可用後啟動。 network.target 是一個 systemd 目標,表示基本網路功能已啟動。

[服務]欄目

這部分指定服務本身的配置,包括它如何運作、哪個使用者運行它以及如果失敗該怎麼辦。

User :指定運行服務的使用者。在這裡,它被設定為root。

EnvironmentFile :指定包含服務使用的環(huán)境變數(shù)的檔案。

WorkingDirectory:指定運行服務的目錄。這是服務進程的工作目錄。這裡,bot 檔案儲存在 /root/selenium_bot/

ExecStart :定義啟動服務的指令。在這裡,它運行 /root/selenium_bot/

中的 main.py 檔案

Restart=on-failure :將服務設定為在因失敗而退出(即非零退出狀態(tài))時自動重新啟動。這對於確保機器人服務保持運作非常有用,即使偶爾出現(xiàn)故障也是如此。

RestartSec=5s :指定發(fā)生故障時重新啟動之間的延遲。在這種情況下,服務將等待 5 秒,然後在失敗後嘗試重新啟動。

StandardOutput=journal :將服務的標準輸出(stdout)重新導向至 systemd 日誌,可以使用journalctl 查看該日誌。這對於日誌記錄和調試目的很有用。

StandardError=journal :將標準錯誤 (stderr) 輸出重新導向至 systemd 日誌。服務遇到的任何錯誤都會被記錄下來,也可以使用journalctl

查看

[安裝]部分

本節(jié)定義如何以及何時啟用或啟動服務。

WantedBy=multi-user.target :指定應啟用服務的目標。在這種情況下,multi-user.target 是系統(tǒng)處於非圖形多用戶模式(常見於伺服器)時到達的 systemd 目標。這意味著該服務將在系統(tǒng)達到此目標時啟動,通常是在系統(tǒng)啟動到多用戶環(huán)境時啟動。

要了解有關 systemd 服務的所有可能設置的更多信息,請查看參考資料

運行服務

讓我們檢查一下我們的服務文件是否有效;如果一切正常,則不應顯示任何內容。

sudo apt update

重新載入 systemd 配置,尋找新的或修改的單元(服務)。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

啟動/重新啟動您的服務。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

停止服務。

google-chrome --version

檢查您的服務狀態(tài)。

python3 -m venv venv

如果您希望服務在啟動時自動啟動,請執(zhí)行此操作。

source venv/bin/activate

修復區(qū)塊緩衝問題

在 python 中,當您在互動式環(huán)境中執(zhí)行腳本時(例如,當您在終端機中手動執(zhí)行 python3 filename.py 時),Python 使用行緩衝。這表示輸出(如 print() 語句中的輸出)會立即顯示。

但是,當Python程式在非互動式環(huán)境中執(zhí)行時(這是我們的情況),輸出將使用區(qū)塊緩衝。這表示程式將在緩衝區(qū)中保留其輸出,直到緩衝區(qū)已滿或程式結束,從而延遲您可以看到日誌/輸出的時間。

您可以在此處了解有關 python 輸出緩衝如何運作的更多資訊。

由於我們想要即時查看日誌和輸出,因此我們可以透過兩種方式解決這個問題。

使用 -u 標誌

python3 文件告訴我們這一點。

-u 強制 stdout 和 stderr 流不被緩衝。 此選項對標準輸入流沒有影響

透過使用 -u 標誌,Python 以完全無緩衝的模式運行 stdout 和 stderr。這意味著每個位元組一產生就會直接發(fā)送到終端(或任何輸出流,如日誌檔案)。根本不發(fā)生緩衝。

通常會進入標準輸出的每個字元(例如來自 print() 語句或錯誤)都會立即逐字節(jié)寫入,而無需等待完整的行或緩衝區(qū)累積。

要使用此選項,請像這樣執(zhí)行腳本:

sudo apt update

如果您選擇此選項,請確保修改服務文件中的 ExecStart。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

使用列印刷新參數(shù)

在Python中,print()函數(shù)預設緩衝其輸出,這表示它將輸出儲存在記憶體中,並且僅在緩衝區(qū)已滿或程式結束時才寫出。透過使用flush=True,您可以強制Python在呼叫print()之後立即刷新輸出,確保輸出立即出現(xiàn)。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

使用journalctl訪問日誌

要查看 systemd 單元(服務)的完整日誌歷史記錄,請使用以下命令。

google-chrome --version

要即時監(jiān)控日誌,請使用 -f 標誌。這將僅顯示最新的日記條目,並在附加到日記時不斷列印新條目。

python3 -m venv venv

參考

  • https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian
  • https://www.selenium.dev/documentation/webdriver/drivers/options/
  • https://www.lambdatest.com/blog/selenium-page-load-strategy/
  • https://pypi.org/project/webdriver-manager/
  • https://pypi.org/project/python-dotenv/
  • https://wiki.archlinux.org/title/Systemd
  • https://man.archlinux.org/man/systemctl.1
  • https://man.archlinux.org/man/systemd.service.5.en#EXAMPLES
  • https://man.archlinux.org/man/systemd-analyze.1
  • https://docs.python.org/3/using/cmdline.html#cmdoption-u
  • https://realpython.com/python-flush-print-output/
  • https://man.archlinux.org/man/journalctl.1

以上是如何使用 systemd 將 Selenium 設定為 Linux 守護進程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python的UNITDEST或PYTEST框架如何促進自動測試? Python的UNITDEST或PYTEST框架如何促進自動測試? Jun 19, 2025 am 01:10 AM

Python的unittest和pytest是兩種廣泛使用的測試框架,它們都簡化了自動化測試的編寫、組織和運行。 1.二者均支持自動發(fā)現(xiàn)測試用例並提供清晰的測試結構:unittest通過繼承TestCase類並以test\_開頭的方法定義測試;pytest則更為簡潔,只需以test\_開頭的函數(shù)即可。 2.它們都內置斷言支持:unittest提供assertEqual、assertTrue等方法,而pytest使用增強版的assert語句,能自動顯示失敗詳情。 3.均具備處理測試準備與清理的機制:un

如何將Python用於數(shù)據分析和與Numpy和Pandas等文庫進行操作? 如何將Python用於數(shù)據分析和與Numpy和Pandas等文庫進行操作? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisionduetonumpyandpandas.1)numpyExccelSatnumericalComputationswithFast,多dimensionalArraysAndRaysAndOrsAndOrsAndOffectorizedOperationsLikenp.sqrt()

什麼是動態(tài)編程技術,如何在Python中使用它們? 什麼是動態(tài)編程技術,如何在Python中使用它們? Jun 20, 2025 am 12:57 AM

動態(tài)規(guī)劃(DP)通過將復雜問題分解為更簡單的子問題並存儲其結果以避免重複計算,來優(yōu)化求解過程。主要方法有兩種:1.自頂向下(記憶化):遞歸分解問題,使用緩存存儲中間結果;2.自底向上(表格化):從基礎情況開始迭代構建解決方案。適用於需要最大/最小值、最優(yōu)解或存在重疊子問題的場景,如斐波那契數(shù)列、背包問題等。在Python中,可通過裝飾器或數(shù)組實現(xiàn),並應注意識別遞推關係、定義基準情況及優(yōu)化空間複雜度。

如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? 如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? Jun 19, 2025 am 01:12 AM

要實現(xiàn)自定義迭代器,需在類中定義__iter__和__next__方法。 ①__iter__方法返回迭代器對象自身,通常為self,以兼容for循環(huán)等迭代環(huán)境;②__next__方法控制每次迭代的值,返回序列中的下一個元素,當無更多項時應拋出StopIteration異常;③需正確跟蹤狀態(tài)並設置終止條件,避免無限循環(huán);④可封裝複雜邏輯如文件行過濾,同時注意資源清理與內存管理;⑤對簡單邏輯可考慮使用生成器函數(shù)yield替代,但需結合具體場景選擇合適方式。

Python編程語言及其生態(tài)系統(tǒng)的新興趨勢或未來方向是什麼? Python編程語言及其生態(tài)系統(tǒng)的新興趨勢或未來方向是什麼? Jun 19, 2025 am 01:09 AM

Python的未來趨勢包括性能優(yōu)化、更強的類型提示、替代運行時的興起及AI/ML領域的持續(xù)增長。首先,CPython持續(xù)優(yōu)化,通過更快的啟動時間、函數(shù)調用優(yōu)化及擬議中的整數(shù)操作改進提升性能;其次,類型提示深度集成至語言與工具鏈,增強代碼安全性與開發(fā)體驗;第三,PyScript、Nuitka等替代運行時提供新功能與性能優(yōu)勢;最後,AI與數(shù)據科學領域持續(xù)擴張,新興庫推動更高效的開發(fā)與集成。這些趨勢表明Python正不斷適應技術變化,保持其領先地位。

如何使用插座在Python中執(zhí)行網絡編程? 如何使用插座在Python中執(zhí)行網絡編程? Jun 20, 2025 am 12:56 AM

Python的socket模塊是網絡編程的基礎,提供低級網絡通信功能,適用於構建客戶端和服務器應用。要設置基本TCP服務器,需使用socket.socket()創(chuàng)建對象,綁定地址和端口,調用.listen()監(jiān)聽連接,並通過.accept()接受客戶端連接。構建TCP客戶端需創(chuàng)建socket對像後調用.connect()連接服務器,再使用.sendall()發(fā)送數(shù)據和??.recv()接收響應。處理多個客戶端可通過1.線程:每次連接啟動新線程;2.異步I/O:如asyncio庫實現(xiàn)無阻塞通信。注意事

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向對象編程中的核心概念,指“一種接口,多種實現(xiàn)”,允許統(tǒng)一處理不同類型的對象。 1.多態(tài)通過方法重寫實現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實現(xiàn)。 2.多態(tài)的實際用途包括簡化代碼結構、增強可擴展性,例如圖形繪製程序中統(tǒng)一調用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對象實現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項包括保持方

如何在Python中切片列表? 如何在Python中切片列表? Jun 20, 2025 am 12:51 AM

Python列表切片的核心答案是掌握[start:end:step]語法並理解其行為。 1.列表切片的基本格式為list[start:end:step],其中start是起始索引(包含)、end是結束索引(不包含)、step是步長;2.省略start默認從0開始,省略end默認到末尾,省略step默認為1;3.獲取前n項用my_list[:n],獲取後n項用my_list[-n:];4.使用step可跳過元素,如my_list[::2]取偶數(shù)位,負step值可反轉列表;5.常見誤區(qū)包括end索引不

See all articles