Как запустить селен в нескольких док-контейнерах при смене прокси? - PullRequest
0 голосов
/ 18 октября 2019

Заранее благодарим всех за терпение и доброту. Я новичок в докере, и мне трудно использовать его для выполнения своей задачи. Пожалуйста, дайте мне знать, если я отправил что-то неправильно, вместо того, чтобы голосовать «вниз».

Я работаю над проектом на гусеничном ходу и пытаюсь использовать docker + selenium + несколько прокси. Вот мой идеальный рабочий процесс: один компьютер содержит несколько контейнеров, один скрипт spider (selenium) выполняется в одном контейнере, и каждый сценарий завершает процесс «выборки и рендеринга веб-сайта -> извлечение информации -> обновление локальной базы данных».

Я знаю, как сменить прокси в селене на локальный. Вот часть моего сценария:

def get_driver():
    driver = getattr(threadLocal, 'driver', None)
    if driver is None:
        chromeOptions = webdriver.ChromeOptions()
        chromeOptions.add_argument("--headless")
        chromeOptions.add_argument('--proxy-server=http://pubproxy.com/api/proxy?format=txt')
        prefs = {
            "profile.managed_default_content_settings.images": 2,
            'disk-cache-size': 4096,
            'permissions.default.stylesheet': 2
        }
        chromeOptions.add_experimental_option('prefs', prefs)
        driver = webdriver.Chrome(chrome_options=chromeOptions)
        setattr(threadLocal, "driver", driver)
    return driver

Я могу завершить процесс "извлекать и отображать сайт -> извлекать информацию -> обновлять локальную базу данных" с помощью прокси-сервера в локальной сети, но я не уверен, что смогу развернутьэто на нескольких док-контейнерах.

Я проверил этот пост: Как настроить специальные параметры прокси-сервера для удаленного веб-привода selenium с python? . Но я все еще не уверен, стоит ли менять прокси в настройках докера, потому что я видел такой пример:

from selenium import webdriver 
chrome = webdriver.Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME )

Если я меняю IP в настройке докера, значит ли это, что мне нужно остановить и открыть его? неоднократно? (Это не идеально для паука?)

Могу ли я передать параметры конфигурации в докер chrome selenium webdriver или мне нужно собрать докер контейнер с предварительно настроенными параметрами прокси-сервера перед его сборкой?

Любой совет по достижению / оптимизации этого рабочего процесса будет принят. Я следую официальному руководству по докеру и заблудился. Искренне надеюсь, что кто-то может помочь мне в правильном направлении.

1 Ответ

0 голосов
/ 18 октября 2019

Вы можете передать функцию прокси, например, get_driver (proxy)

Yo может сделать простую функцию, выбирая из списка предоставленных прокси в файле, который имеет том с вашим контейнером, который вы сможете редактировать в любое время.

def get_driver_with_random_proxy():
    with open('proxy_file.txt') as file:
        proxies_list = file.read().split('\n')
        random_proxy = random.choice(proxies_list)
    return get_driver(random_proxy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...