來源 | python爬蟲人工智慧大數據(ID:pylearn)我們在做爬蟲,或者自動化測試的時候,經常需要用到Selenium,這個框架大家也都不陌生,相信用過的朋友, 大部分肯定都知道在Windows下不管做UI自動化測試還是做爬蟲元素提取,都是非常方便的,比如看下面的代碼,是一個最基本的在Windows下操控Chrome瀏覽器打開網頁的代碼
from selenium import webdriver
driver = webdriver.Chrome(executable_path='C:\\chrome\\chromedriver246.exe')
driver.get("http://www.baidu.com")
問題來了,這段代碼假如我放到我的Linux伺服器上,是否還能夠正常打開我Windows電腦的Chrome瀏覽器並打開網頁?想想也很容易明白,肯定控制不了Windows電腦,更不用說瀏覽器網頁了,那如果我的腳本放伺服器想跑的話,第一種解決方案就是用無頭瀏覽器,這個不多說,導入無頭瀏覽器相關的包就行,可以實現無界面操作,不過我這裡提兩個需求,看大家是否知道有什麼解決方案:
需求一:Linux下跑自動化腳本,想在Windows看帶界面的執行過程,該怎麼做?需求二:假如我有一個需要做UI自動化測試的模塊,自動化測試腳本也放在Linux上,並且這個模塊會由多個測試人員來進行測試,那麼我伺服器的腳本如何能根據不同測試人員的電腦Ip來控制他們Windows下的Chrome瀏覽器?首先看一幅草圖,想實現上面的兩個需求,下面的圖形要先看明白,其實也很直觀,Linux的hub管理中心,發送驅動指令到對應的IP,去找對應Ip的電腦上的Chrome驅動(node) 去打開瀏覽器,進行自動化操作Selenium Ggrid可以同時在不同機器上測試不同瀏覽器,包含一個hub和多個node。node會發送配置信息到hub,hub記錄並跟蹤每一個node的配置信息,同時hub會接受到即將被執行的測試用例及其相關信息,並通過這些信息自動選擇可用的且符合瀏覽器與平臺搭配要求的node,node被選中後,測試用例所調用的selenium命令就會被發送到hub,hub再將這些命令發送到指定給該測試用例的node,之後由node執行測試。2、selenium-server-standalone-3.8.1.jar2、selenium-server-standalone-3.8.1.jar
1、selenium-server-standalone版本一定要和selenium版本匹配,必須都是3版本或者都是2版本,不能一個2一個3,2、chromedriver和jar包放同一目錄!!!(這地方踩過坑,格外注意)1、首先啟動Linux伺服器上的selenium grid服務,需要切換到selenium-server-standalone-3.81.jar所在目錄
java -jar selenium-server-standalone-3.8.1.jar -role hub -port 4455這裡Hub端開啟了4455埠,用來接收node連接信息,啟動成功提示:Registered a node http://10.21.104.88:44552、切換到Windows裡面的selenium-server-standalone-v3.0.1.jar所在目錄
java -jar selenium-server-standalone-3.8.1.jar -role node -port 4455 -hub http://10.21.104.88:4455/grid/register(ip為Linux伺服器ip)啟動成功提示:The node is registered to the hub and ready to use連接成功的話瀏覽器打開:http://10.21.104.88:4455/grid/console可以查看連接hub的node信息,有瀏覽器版本號,表明連接成功,我這裡有兩臺電腦都連了hub好了,當我們把繁瑣的環境配置好後,並且hub和node命令也都開啟並成功建立了連接,我們就可以編寫腳本代碼了,下方是腳本代碼,在本地我們之前用webdriver.Chrome即可,現在在伺服器上,我們通過webdriver.Remote來創建driver對象,執行這個python文件,即可打開Windows的Chrome瀏覽器。
from selenium import webdriver
desired_capabilities={'browserName': 'chrome',
'version': '',
'platform': 'ANY',
'javascriptEnabled': True,
'webdriver.chrome.driver': 'C:\\chrome\\chromedriver246.exe'
}
driver = webdriver.Remote('http://10.20.57.160:4455/wd/hub',desired_capabilities=desired_capabilities)
driver.get("http://www.baidu.com")
selenium grid通過上述方式即可實現文章開頭所說的兩個需求,Linux腳本控制Windows瀏覽器,以及根據不同的IP,控制不同的Windows下的瀏覽器,另外你在測試過程中,肯定還會遇到很多問題,這是學習新知識的必經階段,歡迎留言探討。(*本文為 Python大本營轉載文章,轉載請聯繫原作者)掃碼添加小助手,回覆:大會,加入2019 AI開發者大會福利群,每周
一、三、五更新技術福利,還有不定期的抽獎活動~
僅限今日!2019 AI開發者大會「七夕」限時雙人特惠票搶購中~是不是和男(女)朋友購票不重要啦,兩人組隊即享優惠~
目前大會重磅嘉賓更新中:
阿里、華為、Google Brain、Amazon、微軟中國、百度、京東、小米、快手、科大訊飛、商湯、曠視、圖森、雲知聲、思必馳...「硬核AI技術大會,一年參加一次就夠了」。掃碼查看更多嘉賓和大會信息。