標籤:
學習自動化一直都是在本機操作,感覺這樣能夠減少工作量確實很少。最近研究了一下分布式操作。
開始的想法是,我在一台機器上啟動指令碼,然後讓指令碼在不同機器的不同版本的瀏覽器上進行跑指令碼。
需要準備的東西:
1、jdk,以及環境變數配置好。在cmd下運行javac如果沒有報錯就行。
2、python開發環境。
3、selenium 安裝好
4、下載 selenium-server-standalone-2.45.0.jar的包。這個版本自己看,我用的是這個版本,主要是用46的報錯
一切準備好了,我用的三台機器。60機器作為我跑指令碼的機器,89、162都是平台。
第一、(我按照網上說的方法貌似有的失敗。)最後我是在60這台機器上將在命令列cmd視窗切換到我jar包所在檔案夾,然後執行命令:java -jar selenium-server-standalone-2.45.0.jar -role hub (java -jar selenium-server-standalone-2.45.0.jar -port 4000 -role hub -nodeTimeout 600) 他預設起的是4444連接埠,這個可以自己定義的,這裡是啟動中心節點,我認為就是在哪台機器作為跑指令碼的機器。
第二、啟動node:同樣cmd切換到jar包目錄。java -jar selenium-server-standalone-2.45.0.jar -10.2.4.60 -port 4002 -role webdriver -hub http://10.2.4.60:4000/grid/register -browser browserName=firefox,platform=WINDOWS 這個指定了執行的瀏覽器以及平台的。可以不要-browser後面的。(在啟動中心節點的時候啟動了selenium server的)
第三部、在中心節點機器的瀏覽器中輸入http://localhost:4000/grid/console 查看連結的資訊,如果有node機器資訊那麼就正確了
第四部、聯調,看在中心節點執行指令碼能否在node機器上運行,我一直在這裡糾結了很久都不行,直接貼案例代碼:
__author__ = ‘pc‘from selenium.webdriver import Remotefrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitieslist =[‘http://10.2.4.89:4002/wd/hub‘,‘http://10.2.4.162:4001/wd/hub‘]for host in list: driver = Remote(command_executor=host, desired_capabilities=DesiredCapabilities.FIREFOX) driver.get(‘http://www.baidu.com‘) driver.find_element_by_id(‘kw‘).send_keys(‘selenium python‘) driver.find_element_by_id(‘su‘).click() driver.quit()
我糾結了很久才調通的,還有很多需要擴充的地方,但是覺得只要調試通了一切都好說了。
selenium python grid