Интеграции · Средний

Использование прокси с Selenium WebDriver (Chrome и Firefox)

Классическая проблема Selenium — аутентификация: браузер показывает запрос учётных данных, который WebDriver не может заполнить. Есть два удобных решения: добавить сервер в белый список или поручить Selenium Wire передавать учётные данные.

2 минуты чтения 4 раздела Обновлено Опубликовано

Добавьте публичный IPv4-адрес сервера в белый список на панели управления. Тогда Chrome нужен только адрес прокси, и запрос учётных данных не появляется. Ограничение: если браузер не получает запрос аутентификации, он не отправляет имя пользователя, поэтому шлюз не может прочитать параметры таргетинга и использует пул учётной записи по умолчанию. Если каждой сессии нужна своя страна или идентификатор закреплённой сессии, используйте вариант 2.

Python, Chrome, сервер в белом списке
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

opts = Options()
opts.add_argument("--proxy-server=http://res.hodlproxy.com:9000")
opts.add_argument("--headless=new")
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()

Вариант 2: Selenium Wire (имя пользователя, пароль и параметры)#

Selenium Wire запускает локальный прокси, который добавляет учётные данные, поэтому URL HodlProxy со всеми параметрами работает без изменений.

Python, Selenium Wire
from seleniumwire import webdriver
from selenium.webdriver.chrome.options import Options

proxy = "http://USER-cc-de-city-berlin-sid-sel1-ttl-30m:[email protected]:9000"
sw_options = {"proxy": {"http": proxy, "https": proxy, "no_proxy": "localhost,127.0.0.1"}}

opts = Options()
opts.add_argument("--headless=new")
driver = webdriver.Chrome(seleniumwire_options=sw_options, options=opts)
driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)
driver.quit()

Firefox#

Python, Firefox
from selenium import webdriver
from selenium.webdriver.firefox.options import Options

opts = Options()
opts.set_preference("network.proxy.type", 1)
opts.set_preference("network.proxy.http", "res.hodlproxy.com")
opts.set_preference("network.proxy.http_port", 9000)
opts.set_preference("network.proxy.ssl", "res.hodlproxy.com")
opts.set_preference("network.proxy.ssl_port", 9000)
opts.set_preference("media.peerconnection.enabled", False)  # без утечки WebRTC
driver = webdriver.Firefox(options=opts)  # сервер в белом списке, без запроса данных

Практические правила#

  • Используйте один драйвер для каждого идентификатора сессии; драйверы поддерживают соединения активными, поэтому выходной узел остаётся прежним до окончания срока жизни сессии.
  • Используйте --headless=new в Chrome: старый безголовый режим имеет характерный цифровой отпечаток.
  • Установите язык и часовой пояс браузера в соответствии со страной выходного узла; Selenium Wire также может перезаписать Accept-Language.

Частые вопросы#

Почему Chrome показывает запрос учётных данных прокси при работе с Selenium?

В WebDriver нет API для ответа на диалог аутентификации прокси. Добавьте свой IP-адрес в белый список, чтобы запрос не появлялся, или запустите Selenium Wire, который добавит заголовок Proxy-Authorization.

Можно начинать

Попробуйте на практике.

Создайте аккаунт, пополните баланс на $20 и вставьте конечную точку из этого руководства в свой инструмент. Срок действия оплаченного трафика не ограничен.