Selenium-Python 在遠程服務器運行Chrome(包括headless模式,以及VNC虛擬顯示器模式)

背景

最近一直在測試一個批量注冊賬號的腳本,由于腳本使用了國外代理proxy,速度十分緩慢,想到的解決方式是將腳步運行于outside server上,應該能提高代理速度。
通過查詢,selenium在服務器端可行的主要方式有兩種,一種是使用瀏覽器的headless模式,支持的瀏覽器很多,chrome\firefox等;另一種是使用虛擬的顯示模式,在linux上安裝xvfb等虛擬顯示程序實現(xiàn)瀏覽器的運行。這里,由于我想對腳本的運行情況進行監(jiān)控,延伸使用了vnc技術,核心vncserver(xvnc)與xvfb類似,只是可以通過客戶端vnc view查看遠程服務器的GUI和瀏覽器的運行情況。(備注:xvfb了解到的情況是也可以通過x11的客戶端共享遠程服務器內存,實現(xiàn)同樣的效果,有興趣的朋友可以自行查看,我沒有深入了解)。

測試環(huán)境

OS: centos 7
selenium 3.11.0
python 3.5.1
Google Chrome 65.0.3325.181
virtual

這些程序的安裝都是很簡單的就不記錄了。

一、chrome headless mode

chrome在前期的版本中是沒有headless模式的,在近幾次版本的更新中加入了headless mode.
提及的程序安裝略過,需要注意的是一下幾點:
1. 對于新建的項目建議使用# virtualenv隔離環(huán)境
2.將最新的chromedriver linux 版本放入項目bin目錄
3.chrome設計的時候是不允許root用戶直接使用的。為了程序的正常運行,需要添加額外的參數(shù) '--no-sandbox'
通過一個簡單的腳本測試可行性:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('headless')
chrome_options.add_argument('no-sandbox')
#chrome_options.add_argument('--window-size=1920x1080')

driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.baidu.com')
test = driver.find_element_by_id('u1')
testa = test.find_elements_by_tag_name('a')[1].text
print(testa)

driver.quit()

測試代碼顯示了想要的結果。

二、VNCSERVER 、VNC VIEW

上面的headless模式雖然可以成功執(zhí)行代碼,但是無法觀察代碼執(zhí)行情況,需要額外寫很多提示語才能知道代碼運行中的情況。VNC提供了一個方便的方式,可以在本地客戶端,查看遠程服務器端GUI

步驟如下:
1. 安裝服務器桌面環(huán)境
sudo yum groupinstall -y "GNOME Desktop"
安裝成功后重啟服務器: sudo reboot

2.安裝TigerVNC Server
sudo yum install -y tigervnc-server

3.配置vncserver

sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

vncserver@:1.service 代表的是一個vnc服務,如果設置多個,可以配置多個文件 vncserver@:2.service vncserver@:3.service 等

然后進行配置
sudo vi /etc/systemd/system/vncserver@:1.service

Screen Shot 2018-04-04 at 2.39.21 PM.png

修改<USER>部分,我目前使用的是root賬號

PIDFILE這里的位置需要刪除/home變?yōu)?br> /root/.vnc/%H%i.pid

保存后執(zhí)行如下代碼:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@:1.service

4.設置vnc賬號密碼用于vnc客戶端登陸
切換到你要使用的賬號,運行: vncserver
這里會提示你輸入密碼,密碼隨意

5.開啟vncserver
sudo systemctl start vncserver@:1.service
還可以查看vncserver狀態(tài)
sudo systemctl status vncserver@:1.service

6.設置防火墻
sudo systemctl start firewalld
sudo firewall-cmd --permanent --zone=public --add-port=5901-5905/tcp
端口設置根據(jù)自己的情況設置,如果前面的vncserver@:1.service為1,端口就是5901.

7.客戶端登陸
下載vnc view客戶端
登陸服務器


Screen Shot 2018-04-04 at 4.09.13 PM.png

密碼登陸后:


Screen Shot 2018-04-04 at 4.10.53 PM.png

目前為止,VNC 設置完成了

8.運行selenium代碼
與在本機運行情況相同,在運行前終端輸入 export DISPLAY=:1
這里的數(shù)字也是前面設置的端口數(shù)字。

好了整個centos 桌面GUI 環(huán)境就完成了。

需要注意的幾點是:
1.服務器最好選用內存大一些的,不然會出現(xiàn)很多無法解決的錯誤。
2.目前國內國外網(wǎng)上關于VNC設置的教程都是老版本,在設置vncserver@:1.service時按照文檔提示進行設置,尤其注意如果使用root用戶進行設置,一定要去掉PIDFILE路徑的/home.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 最近開始學習Linux,在虛擬機中裝好系統(tǒng)后,直接在CentOS中操作不太方便,使用過程中需要在虛擬機和Windo...
    Surpassme閱讀 1,128評論 0 2
  • tigervnc 是client-server的工作模式,默認是不加密的,可以使用ssh forwarding m...
    suenism閱讀 1,484評論 0 1
  • 前言 最近公司新搞了臺阿里云的服務器,boss叫我弄一下帶界面的遠程。雖然我覺得用不到,但boss交代了,還是要好...
    marioplus12閱讀 9,937評論 0 2
  • 技術雷達快訊:自2017年中以來,Chrome用戶可以選擇以headless模式運行瀏覽器。此功能非常適合運行前端...
    ThoughtWorks閱讀 8,045評論 8 28
  • 閨蜜淼與我通電話,說:“我叱咤職場這么多年,見到無數(shù)的職場精英、賢妻良母,但都沒有做到好朋友這一層,你是我見過的包...
    94美醬閱讀 460評論 0 0

友情鏈接更多精彩內容