Доброй ночи, Лоровцы. Пайтон знаю не очень хорошо, и недавно столкнулся с одной проблемой. В общем, есть следующий код:
#!/usr/bin/env python2.7
from multiprocessing import Pool
from termcolor import colored
from selenium import webdriver
#from pyvirtualdisplay import Display
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import random
import time
urls = ['http://linux.org.ru', 'http://opennet.ru'] # и куча остальных url
def bobo(url):
bro = webdriver.Remote(
command_executor='http://192.168.1.125:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX)
print colored('>>> Start browser', 'green')
bro.get(url)
print colored('>>> Get page: ', 'yellow')+colored(url, 'cyan')
bro.save_screenshot('./screens/'+str(random.random())+'.png')
print colored('>>> Make screenshot', 'magenta')
bro.quit()
print colored('>>> Exit ...', 'red')
if __name__ == '__main__':
pool = Pool(processes=100)
result = pool.map_async(bobo, urls)
result.wait()
print result
print result.get(timeout=1)
print colored('*** END ***', 'red')
На другом компьютере запущен selenium-server, к которому из этого кода я и подключаюсь. Так вот, проблема в том, что через некоторое время начинается какая-то непонятная феерия, которая, выглядит, например, так:
<multiprocessing.pool.MapResult object at 0x7f957bf35390>
Traceback (most recent call last):
File "./poo.py", line 51, in <module>
print result.get(timeout=1)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
selenium.common.exceptions.WebDriverException: Message: Could not convert screenshot to base64 - Error: Invalid base64 data: data:,
Driver info: driver.version: unknown
Stacktrace:
at <anonymous class>.FirefoxDriver.prototype.screenshot (file:///tmp/anonymous8234494257891062854webdriver-profile/extensions/fxdriver@googlecode.com/components/drive
r-component.js:9844:5)
at <anonymous class>.DelayedCommand.prototype.executeInternal_/h (file:///tmp/anonymous8234494257891062854webdriver-profile/extensions/fxdriver@googlecode.com/compone
nts/command-processor.js:11635:16)
at <anonymous class>.DelayedCommand.prototype.executeInternal_ (file:///tmp/anonymous8234494257891062854webdriver-profile/extensions/fxdriver@googlecode.com/component
s/command-processor.js:11640:7)
at <anonymous class>.DelayedCommand.prototype.execute/< (file:///tmp/anonymous8234494257891062854webdriver-profile/extensions/fxdriver@googlecode.com/components/comma
nd-processor.js:11582:5)
Ну, и ещё бывают всякие разные ошибки. Например, когда я из этого же кода пытаюсь вызвать phantomjs много раз, без selenium remote, то например, эта программа вываливается со следующими ошибками:
>>> Start browser
<multiprocessing.pool.MapResult object at 0x7f4d9d36ed90>
Traceback (most recent call last):
File "./poo.py", line 51, in <module>
print result.get(timeout=1)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
selenium.common.exceptions.WebDriverException: Message: Can not connect to GhostDriver
Собственно, хочу спросить, как правильно можно использовать толпу браузеров совместно с python? Или я допустил в коде какую-то ошибку? Буду очень признателен за помощь.