1. 前言
大家好,我是安果!
日常編寫的 Python 自動化程式,如果在本地執行穩定後,就可以考慮將它部署到伺服器,結合定時任務完全解放雙手
但是,由於自動化程式與平臺相容性有關聯,有一些依賴庫在伺服器執行需要做特殊處理
本篇文章以一段 Selenium 編寫的 Python 自動化程式,聊聊指令碼部署伺服器的詳細過程
2. 操作步驟
以 CentOS 伺服器為例
2-1.安裝桌面環境
PS:如果已經安裝,可以跳到下一步
我們需要先安裝一個桌面環境「 以 GNOME 為例 」,設定以圖形模式啟動,並開啟圖形介面
# 安裝 GNOME 桌面環境yum groupinstall -y "GNOME Desktop"# 設定以圖形模式啟動systemctl set-default graphical.target # 開啟圖形介面startx
2-2.安裝配置遠端桌面
以最常見的 VNC 為例
首先,在伺服器上安裝 VNC Server,並設定登入密碼
# 安裝vnc serveryum install tigervnc-server -y# 設定登入密碼,用於vnc viewer登入密碼vncpasswd
然後,啟動 VNC Server,並開啟對應的埠號
# 開啟VNC服務systemctl start vncserver@:1# 設定開機自啟systemctl enable vncserver@:1 # 檢視VNC服務的埠netstat -lnpt|grep Xvnc# 開啟埠號firewall-cmd --add-port=5901/tcp --permanentfirewall-cmd --reload
最後,下載VNC Viewer,使用「IP 地址 + 埠號 + 登入密碼」遠端連線伺服器
PS:VNC Server 顯式指定IP地址+埠號
2-3.安裝 Chrome 瀏覽器
伺服器預設安裝的瀏覽器為 FireFox,Chrome 瀏覽器需要自己手動安裝
# 下載最新的Chrome瀏覽器wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm# 安裝瀏覽器yum install google-chrome-stable_current_x86_64.rpm# 檢查Chrome瀏覽器的版本google-chrome -version
安裝完成之後,發現使用 Root 使用者啟動 Chrome 瀏覽器失敗PS:伺服器 Chrome 瀏覽器不支援直接使用,需要以 --no-sandbox 引數啟動
# 以--no-sandbox方式啟動Chrome瀏覽器# 方式一:命令列啟動/usr/bin/google-chrome-stable --no-sandbox# 方式二:修改Chrome瀏覽器快捷圖示的啟動方式# 啟動方式:--no-sandbox
2-4.配置 Chrome Driver 及授權
在官網下載 Chrome 瀏覽器對應版本的 Chrome Driver
解壓後,上傳到伺服器的「 usr/bin 」目錄下
最後,對 chromedriver 檔案授予可執行的許可權
[root@localhost xh]# cd /usr/bin# 授予可執行的許可權[root@localhost bin]# sudo chmod +x chromedriver
2-5.視覺化執行測試
將自動化指令碼上傳到伺服器,設定以有頭模式執行
注意:由於伺服器的 Chrome 需要配置以 no-sandbox 模式啟動,因此自動化指令碼需要新增設定屬性
option = webdriver.ChromeOptions()# 以無頭模式執行#option.add_argument('headless')option.add_argument('no-sandbox')option.add_argument('disable-dev-shm-usage')option.add_experimental_option('useAutomationExtension', False)option.add_experimental_option('excludeSwitches', ['enable-automation'])browser = webdriver.Chrome(chrome_options=option)
「有頭模式」測試執行正常後,就可以開啟「無頭模式」,編寫定時任務,將自動化指令碼與定時任務關聯上。
3. 最後
文中以 Selenium 自動化指令碼部署伺服器的步驟流程進行了闡述
需要指出的是,伺服器上的視覺化除錯測試確實很有必要,它可以幫助我們提前定位相容性問題