Webscraping с помощью докера кластера сетки селена - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над селеновой решеткой для очистки сайта. Если я использую только один узел хрома, это означает, что селеновая сетка работает, если я масштабирую более одного узла хрома и селеновой сетки, и повторная очистка снова перестает работать. Он просто мигает через некоторое время с большим сообщением об ошибке.

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import scrapy
from selenium import webdriver

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    start_urls = ['https://google.com']

    def __init__(self):
        options = webdriver.ChromeOptions()

        options.add_argument('--headless')

        self.driver = webdriver.Remote(command_executor='http://localhost:5000/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME)


    def parse(self, response):
        data = self.driver.get(response.url)
        print(data,'/////////////')

Затем я открыл оболочку python и набрал индивидуальный код

Python 3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
>>> options = webdriver.ChromeOptions()
>>> options.add_argument('--headless')
>>> driver = webdriver.Remote(command_executor='http://localhost:5000/wd/hub',
...             desired_capabilities=DesiredCapabilities.CHROME)

Как вы видите, он остановился в webdriver. Удаленный .cursor просто мигает долгое время, после чего появляется большое сообщение об ошибке. Я думаю, что проблема в webdriver.Remote (command_executor = 'http://localhost:5000/wd/hub', ... требуемая строка = DesiredCapabilities.CHROME).

Может кто-нибудь дать решение этой проблемы Обратите внимание, что это работает, если сетка селена имеет один узел (хром), если я масштабирую более одного узла (хром).

Это сообщение об ошибке после долгого времени:

Traceback (последний вызов был последним): файл "", строка 1, в файл "/Home/vicky/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", строка 156, в init Файл self.start_session (functions, browser_profile) "/home/vicky/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", строка 251, в start_session response = self.execute (Command.NEW_SESSION, параметры) Файл "/home/vicky/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", строка 320, в исполнении self.error_handler.check_response (response) Файл "/home/vicky/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", строка 242, в check_response повысить исключение_класса (сообщение, экран, трассировка стека) selenium.common.exceptions.WebDriverException: сообщение: ошибка Переадресация нового сеанса. Ошибка переадресации запроса. 172.18.0.8:5555 [/172.18.0.8] не удалось: Превышено время ожидания соединения (Превышено время ожидания соединения) Stacktrace: в org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:117) в org.openqa.grid.web.servlet.DriverServlet.process (DriverServlet.java:84) на org.openqa.grid.web.servlet.DriverServlet.doPost (DriverServlet.java:68) на javax.servlet.http.HttpServlet.service (HttpServlet.java:707) на javax.servlet.http.HttpServlet.service (HttpServlet.java:790) в org.seleniumhq.jetty9.servlet.ServletHolder.handle (ServletHolder.java:860) в org.seleniumhq.jetty9.servlet.ServletHandler.doHandle (ServletHandler.java:535) в org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188) в org.seleniumhq.jetty9.server.session.SessionHandler.doHandle (SessionHandler.java:1595) в org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188) в org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle (ContextHandler.java:1253) в org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:168) в org.seleniumhq.jetty9.servlet.ServletHandler.doScope (ServletHandler.java:473) в org.seleniumhq.jetty9.server.session.SessionHandler.doScope (SessionHandler.java:1564) в org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:166) в org.seleniumhq.jetty9.server.handler.ContextHandler.doScope (ContextHandler.java:1155) в org.seleniumhq.jetty9.server.handler.ScopedHandler.handle (ScopedHandler.java:141) в org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) в org.seleniumhq.jetty9.server.Server.handle (Server.java:530) в org.seleniumhq.jetty9.server.HttpChannel.handle (HttpChannel.java:347) в org.seleniumhq.jetty9.server.HttpConnection.onFillable (HttpConnection.java:256) в org.seleniumhq.jetty9.io.AbstractConnection $ ReadCallback.succeeded (AbstractConnection.java:279) в org.seleniumhq.jetty9.io.FillInterest.fillable (FillInterest.java:102)в org.seleniumhq.jetty9.io.ChannelEndPoint $ 2.run (ChannelEndPoint.java:124) в org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce (EatWhatYouKill.java:247) в org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.produce (EatWhatYouKill.java:140) в org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.run (EatWhatYouKill.java:131) в org.seleniumhq.jetty9.util.thread.ReservedThreadExecutor $ ReservedThread.run (ReservedThreadExecutor.java:382) в org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:708) в org.seleniumhq.jetty9.util.thread.QueuedThreadPool $ 2.run (QueuedThreadPool.java:626)

Я также прикрепил скриншот консоли сетки селена, когда используется несколько узлов. Ссылка здесь, чтобы увидеть картинку

1 Ответ

0 голосов
/ 10 июля 2018

Похоже, вы запускаете новые узлы Selenium с Firefox, но ваши тесты специально ищут Chrome.

Я бы рекомендовал использовать Zalenium для настройки вашей Selenium Grid: https://github.com/zalando/zalenium

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...