背景
最近一直在測試一個批量注冊賬號的腳本瞳秽,由于腳本使用了國外代理proxy,速度十分緩慢率翅,想到的解決方式是將腳步運行于outside server上练俐,應(yīng)該能提高代理速度。
通過查詢冕臭,selenium在服務(wù)器端可行的主要方式有兩種腺晾,一種是使用瀏覽器的headless模式,支持的瀏覽器很多辜贵,chrome\firefox等悯蝉;另一種是使用虛擬的顯示模式,在linux上安裝xvfb等虛擬顯示程序?qū)崿F(xiàn)瀏覽器的運行托慨。這里鼻由,由于我想對腳本的運行情況進(jìn)行監(jiān)控,延伸使用了vnc技術(shù),核心vncserver(xvnc)與xvfb類似蕉世,只是可以通過客戶端vnc view查看遠(yuǎn)程服務(wù)器的GUI和瀏覽器的運行情況蔼紧。(備注:xvfb了解到的情況是也可以通過x11的客戶端共享遠(yuǎn)程服務(wù)器內(nèi)存,實現(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設(shè)計的時候是不允許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()
測試代碼顯示了想要的結(jié)果重荠。
二箭阶、VNCSERVER 、VNC VIEW
上面的headless模式雖然可以成功執(zhí)行代碼戈鲁,但是無法觀察代碼執(zhí)行情況仇参,需要額外寫很多提示語才能知道代碼運行中的情況。VNC提供了一個方便的方式婆殿,可以在本地客戶端诈乒,查看遠(yuǎn)程服務(wù)器端GUI
步驟如下:
1. 安裝服務(wù)器桌面環(huán)境
sudo yum groupinstall -y "GNOME Desktop"
安裝成功后重啟服務(wù)器: 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服務(wù),如果設(shè)置多個婆芦,可以配置多個文件 vncserver@:2.service vncserver@:3.service 等
然后進(jìn)行配置
sudo vi /etc/systemd/system/vncserver@:1.service
修改<USER>部分怕磨,我目前使用的是root賬號
PIDFILE這里的位置需要刪除/home變?yōu)?br> /root/.vnc/%H%i.pid
保存后執(zhí)行如下代碼:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@:1.service
4.設(shè)置vnc賬號密碼用于vnc客戶端登陸
切換到你要使用的賬號,運行: vncserver
這里會提示你輸入密碼消约,密碼隨意
5.開啟vncserver
sudo systemctl start vncserver@:1.service
還可以查看vncserver狀態(tài)
sudo systemctl status vncserver@:1.service
6.設(shè)置防火墻
sudo systemctl start firewalld
sudo firewall-cmd --permanent --zone=public --add-port=5901-5905/tcp
端口設(shè)置根據(jù)自己的情況設(shè)置肠鲫,如果前面的vncserver@:1.service為1,端口就是5901.
7.客戶端登陸
下載vnc view客戶端
登陸服務(wù)器
密碼登陸后:
目前為止或粮,VNC 設(shè)置完成了
8.運行selenium代碼
與在本機(jī)運行情況相同导饲,在運行前終端輸入 export DISPLAY=:1
這里的數(shù)字也是前面設(shè)置的端口數(shù)字。
好了整個centos 桌面GUI 環(huán)境就完成了氯材。
需要注意的幾點是:
1.服務(wù)器最好選用內(nèi)存大一些的渣锦,不然會出現(xiàn)很多無法解決的錯誤。
2.目前國內(nèi)國外網(wǎng)上關(guān)于VNC設(shè)置的教程都是老版本氢哮,在設(shè)置vncserver@:1.service時按照文檔提示進(jìn)行設(shè)置泡挺,尤其注意如果使用root用戶進(jìn)行設(shè)置,一定要去掉PIDFILE路徑的/home.