Передайте аргументы из Selenium Grid (SG) Hub узлам SG и сохраните собранные данные сайтов локально в одном файле. - PullRequest
0 голосов
/ 22 сентября 2018

Язык: Python

Версия: 3,5-3,6

ОС: Windows 10 x64

Стек: selenium grid, docker, parallel, REST, parsing websites

Привет всем!

При написании парсера для нескольких веб-сайтов я столкнулся с несколькими проблемами:

  1. Мне нужно открыть более 30 экземпляров chrome.Затем в указанное время обновите их одновременно и загрузите некоторые данные в выходной словарь.
  2. Веб-сайты совершенно разные.Большинство из них состоит из тонн JS, AJAX, JQuery и т. Д. Некоторые из них специально разработаны для того, чтобы избежать parsing.
  3. Я не могу использовать облака для улучшенияэффективность синтаксического анализа, разрешены только ресурсы локальных компьютеров (правила корпоративной защиты).

Мое решение было использовать Selenium Grid на локальном компьютере с Docker.

docker-compose.yml:

version: '3.5'

services:

  hub:
    image: selenium/hub:3.14.0
    ports:
      - 4444:4444

  chrome:
    image: selenium/node-chrome-debug:3.14.0
    depends_on:
      - hub
    environment:
      - HUB_HOST=hub

$docker-compose scale chrome=30 hub=1

Моя текущая проблема заключается в том, что я не могу понять, как записать следующий цикл в Python:

Концентратор -> (обновить) -> все контейнеры -> (передать данные в Hub) -> Hub ->

Не могли бы вы, пожалуйста, помочь с этим.Я думаю, что решение организует RESTful запросов, но я не мог найти, как это сделать.

...