Настройка прокси в Selenium (Python)

Selenium с прокси Prokso на Python: --proxy-server для Chrome, доступ по IP вместо логина, selenium-wire, отдельный порт на браузер.

Обновлено · Редакция Prokso

Данные для подключения
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новый IP на каждый запрос · 10000–20000 фиксированный IP (sticky-сессия), HTTP(S) и SOCKS5
Логин и пароль
в кабинете, на странице плана

Готовые строки в нужном формате генерирует кабинет: выберите страну, тип IP и протокол.

Коротко
  • Хост — gw.prokso.com, порты 823 (HTTP), 824 (SOCKS5), 10000–20000 (фиксированный IP, HTTP или SOCKS5)
  • Логин и пароль — в кабинете на странице плана
  • Проверяйте IP в ответе самого запроса через прокси: страница «Мой IP» в браузере ваш скрипт не проверяет
Прокси в Selenium: короткая видеоинструкция · 0:33

Пошаговая инструкция, как подключить прокси Prokso в Selenium (Python). Займёт несколько минут.

Шаг 1. Возьмите данные прокси в кабинете

Откройте план и скопируйте хост gw.prokso.com, порт, логин и пароль. Порт 823 — HTTP, 824 — SOCKS5 (оба дают новый IP на каждый запрос); порты 10000–20000 — фиксированный IP до 120 минут, работают и как HTTP, и как SOCKS5 (каждый порт — отдельный адрес). Страну задают в логине: логин__cr.ua.

Блок «Доступ» на странице плана: хост, порты, логин и пароль для строки прокси
Блок «Доступ» на странице плана: хост, порты, логин и пароль для строки прокси

Шаг 2. Добавьте свой IP в доступ по IP

Chrome не принимает логин и пароль в параметре --proxy-server, поэтому проще всего открыть в кабинете страницу плана и в блоке «Доступ по IP без пароля» добавить IP-адрес компьютера или сервера, где запускается скрипт (до 5 адресов). Тогда прокси будет пускать без пароля.

Шаг 3. Передайте прокси в Chrome

Установите Selenium (pip install selenium) и укажите прокси через --proxy-server: хост gw.prokso.com и порт. Для одного браузера на всю сессию берите фиксированный порт 10000–20000, чтобы страницы не открывались с разных IP.

# pip install selenium   (the computer's IP is added to the IP whitelist)
from selenium import webdriver
from selenium.webdriver.common.by import By

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://gw.prokso.com:10001")
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print(driver.find_element(By.TAG_NAME, "body").text)
driver.quit()

Шаг 4. Если нужна авторизация логином

Когда доступ по IP не подходит (например, IP сервера часто меняется), можно пустить трафик через selenium-wire: он сам подставляет логин и пароль. Учтите, что этот проект больше не обновляется, поэтому на новых версиях Selenium возможны сбои.

# pip install selenium-wire   (no longer maintained)
from seleniumwire import webdriver

sw = {"proxy": {"http": "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823",
                "https": "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823"}}
driver = webdriver.Chrome(seleniumwire_options=sw)
driver.get("https://api.ipify.org")
print(driver.page_source)
driver.quit()

Шаг 5. Проверьте, какой IP видит скрипт

Запустите пример: Chrome под управлением Selenium откроет https://api.ipify.org, а скрипт напечатает IP — это должен быть IP прокси. Ваш обычный браузер работает без прокси, поэтому страница «Мой IP» в нём покажет ваш адрес.

Пример запуска: в выводе — IP прокси, а не ваш. На фиксированном порту адрес остаётся тем же
Пример запуска: в выводе — IP прокси, а не ваш. На фиксированном порту адрес остаётся тем же

Если адрес сервера меняется

Доступ по IP удобен, пока у компьютера или сервера постоянный внешний адрес. У домашнего интернета и у части облачных серверов адрес меняется, и прокси перестаёт пускать скрипт. Признак — вчера всё работало, а сегодня Chrome показывает окно с логином. Проверьте текущий адрес командой curl https://prokso.com/ip без прокси и обновите его на странице плана.

Как сократить расход трафика

Отключите загрузку картинок в настройках Chrome и запускайте браузер без окна: для сбора данных изображения не нужны.

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://gw.prokso.com:10001")
opts.add_argument("--headless=new")
# do not load images: saves most of the page weight
opts.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
driver = webdriver.Chrome(options=opts)

Ожидания и тайм-ауты

Через прокси страницы открываются медленнее, чем напрямую. Вместо пауз фиксированной длины используйте явные ожидания WebDriverWait: скрипт продолжит работу, как только элемент появится. Общий предел загрузки задаёт driver.set_page_load_timeout() — поставьте его с запасом, например 60 секунд.

Если страница не открывается

  • Окно с запросом логина. IP скрипта не добавлен в доступ по IP или изменился.
  • ERR_PROXY_CONNECTION_FAILED. Проверьте хост и порт в --proxy-server.
  • ERR_TUNNEL_CONNECTION_FAILED. Прокси ответил отказом: чаще всего закончился трафик на плане.
  • TimeoutException. Страница не успела загрузиться — увеличьте предел или проверьте, отвечает ли сам сайт.

Вопросы и ответы

Почему не работает http://логин:пароль@хост в --proxy-server?

Chrome игнорирует логин и пароль в этом параметре — так он устроен. Поэтому нужен доступ по IP или инструмент, который сам отвечает на запрос авторизации.

Как запустить несколько браузеров с разными IP?

Дайте каждому экземпляру Chrome свой фиксированный порт из диапазона 10000–20000. Каждый порт держит собственный IP.

Как выбрать страну IP?

Включите расширенный режим («Настройки → Режим настроек → Расширенный»), откройте план и в «Настройках пула» укажите страны по умолчанию, например <code>de, pl</code>. Доступ по IP будет брать адреса только из них. Если поле пустое, IP будет из любой страны пула, кроме исключённых.

Работает ли прокси в headless-режиме?

Да. Аргумент <code>--proxy-server</code> действует одинаково с окном и без него.

Можно ли использовать Firefox вместо Chrome?

Да. В Firefox прокси задаётся через настройки профиля, а не аргументом запуска. Логин и пароль он тоже не принимает из кода, поэтому доступ по IP остаётся самым простым способом.