Доброго вечера, Лоровцы. В общем, есть такая проблема. Запускаю selenium grid, вот так:
java -Xms512m -Xmx2048m -jar selenium-server-standalone-2.45.0.jar -role hub -log ./out.log
Потом запускаю как selenium-node сотню процессов phantomjs на разных портах, и подключаю к selenium grid.
Запускаю так:
for port in {8080..8180}; do phantomjs --webdriver=192.168.1.155:$port --webdriver-selenium-grid-hub=http://172.17.0.7:4444 & done
Всё по логам запускается, в selenium grid console видно все процессы, видно что подключены, например, так:
[INFO - 2015-03-23T18:41:57.883Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.886Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.887Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.889Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.890Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.891Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
[INFO - 2015-03-23T18:41:57.893Z] HUB Register - register - Registered with grid hub: http://172.17.0.7:4444/ (ok)
Но при использовании вот такого кода(запускается 10 python-процессов, подключаются к selenium grid, вызывают браузер, и загружают\скриншотят страницу, выпадает следующая ошибка, от самой python-программы:
selenium.common.exceptions.WebDriverException: Message: cannot forward the request 192.168.1.155:8132 failed to respond
Stacktrace:
at org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:139)
at org.openqa.grid.web.servlet.DriverServlet.process (DriverServlet.java:83)
at org.openqa.grid.web.servlet.DriverServlet.doPost (DriverServlet.java:67)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:820)
at org.seleniumhq.jetty7.servlet.ServletHolder.handle (ServletHolder.java:565)
Никаких фаерволов нет, подсети друг-друга видят, и т.п.
Сам скрипт на Python:
#!/usr/bin/env python2.7
# coding=utf-8
import os
import time
import random
from termcolor import colored
from multiprocessing import Pool
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import WebDriverException
url1 = ['https://yandex.ru']
urls = url1 * 2000
def main(url):
###
file = './tmp/'+str(random.random())+'.png'
###
print colored('start browser with id = '+str(os.getpid()), 'green')
###
try:
driver = webdriver.Remote(
command_executor='http://172.17.0.7:4444/wd/hub',
desired_capabilities={
"browserName": "phantomjs",
})
except WebDriverException:
###
print colored('Browser fail to start, try again', 'red')
###
print colored('Waiting for new browser', 'red')
###
time.sleep(30)
####
driver = webdriver.Remote(
command_executor='http://:4444/wd/hub',
desired_capabilities={
"browserName": "phantomjs",
})
###
driver.set_window_size(1440, 900)
#browser.maximize_window()
driver.implicitly_wait(40)
driver.set_page_load_timeout(80)
###
time.sleep(5)
###
print 'browser is load = '+str(os.getpid())
###
print 'Get page = '+str(os.getpid())+' | '+str(url)
###
driver.get(url)
time.sleep(20)
###
print colored('Save screenshot = '+str(os.getpid()), 'cyan')
###
driver.save_screenshot(file)
time.sleep(10)
###
print 'Stay to memory = '+str(os.getpid())
###
time.sleep(5)
###
print colored('Free memory!', 'green')
driver.quit()
pool = Pool(processes=10)
#pool = Pool(80)
count = 0
while count < len(urls):
print urls[count]
pool.map(main, urls[count])
time.sleep(5)
count += 1
#result.wait()
pool.close()
pool.join()
В логе selenium-grid никаких ошибок нет, только инфа о старте новой сессии(одной), и всё.
В чём может быть дело? Уже ума не приложу.