Налаштування проксі в 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:34

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

Крок 1. Візьміть дані проксі в особистому кабінеті

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

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

Крок 2. Додайте свій IP у доступ за IP (білий список)

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

Крок 3. Передайте проксі в Chrome

Встановіть 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 залишається найпростішим способом.