Вариант 1: белый список IP-адресов (рекомендуется для серверов)#
Добавьте публичный IPv4-адрес сервера в белый список на панели управления. Тогда Chrome нужен только адрес прокси, и запрос учётных данных не появляется. Ограничение: если браузер не получает запрос аутентификации, он не отправляет имя пользователя, поэтому шлюз не может прочитать параметры таргетинга и использует пул учётной записи по умолчанию. Если каждой сессии нужна своя страна или идентификатор закреплённой сессии, используйте вариант 2.
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 со всеми параметрами работает без изменений.
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#
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.