Гайд із Selenium · 2 хв читання

Налаштування проксі у Selenium на Python і Java

Selenium пускає браузер через проксі буквально кількома рядками, але для проксі з автентифікацією потрібне розширення або допоміжний сервіс: Chrome не приймає USER:PASS у командному рядку. Показуємо надійний патерн.

Проблема авторизації в Selenium

Прописати в Selenium проксі без авторизації — справа однієї стрічки: додаєте --proxy-server=http://host:3128 до опцій Chrome або заповнюєте об'єкт Proxy у Selenium — і все. Щойно проксі починає вимагати логін і пароль, цей простий шлях ламається: Chrome не приймає облікові дані просто в рядку, а на відміну від Puppeteer чи Playwright, у Selenium немає вбудованого гачка authenticate(), щоб відповісти на виклик 407.

Надійне рішення, однакове для будь-якої мови, — крихітне розширення Chrome, яке генерується під час запуску, несе ваші облікові дані й відповідає на запит авторизації проксі через API webRequest. Воно працює в headless-режимі, не потребує додаткових служб і поводиться однаково в Python і Java. З s4m ви націлюєте розширення на proxy.s4m.online:3128 (HTTP) і свої USER:PASS. Контекст дивіться на сторінці проксі та в гайді про авторизацію; а якщо на час тестів хочеться обійтися без авторизації, у безкоштовному списку є відкриті проксі, які можна одразу підставити у прапорець командного рядка.

Проксі з авторизацією через згенероване розширення

Цей помічник на Python пише одноразове розширення Chrome із вашими обліковими даними й одразу його підвантажує. Перед запуском підставте свої USER:PASS.

python
import os, zipfile, tempfile
from selenium import webdriver

HOST, PORT, USER, PASS = "proxy.s4m.online", 3128, "USER", "PASS"

manifest = '{"version":"1.0.0","manifest_version":2,"name":"s4m-proxy",'\
  '"permissions":["proxy","webRequest","webRequestBlocking","<all_urls>"],'\
  '"background":{"scripts":["bg.js"]}}'

bg = ('var c={mode:"fixed_servers",rules:{singleProxy:'
      '{scheme:"http",host:"%s",port:%d}}};'
      'chrome.proxy.settings.set({value:c,scope:"regular"},function(){});'
      'chrome.webRequest.onAuthRequired.addListener('
      'function(d){return {authCredentials:{username:"%s",password:"%s"}};},'
      '{urls:["<all_urls>"]},["blocking"]);') % (HOST, PORT, USER, PASS)

path = os.path.join(tempfile.mkdtemp(), "s4m_proxy.zip")
with zipfile.ZipFile(path, "w") as z:
    z.writestr("manifest.json", manifest)
    z.writestr("bg.js", bg)

opts = webdriver.ChromeOptions()
opts.add_extension(path)
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print("Exit IP:", driver.find_element("tag name", "body").text)
driver.quit()

# ----- Java (unauthenticated proxy) -----
// Proxy p = new Proxy();
// p.setHttpProxy("proxy.s4m.online:3128");
// ChromeOptions o = new ChromeOptions();
// o.setProxy(p);
// WebDriver driver = new ChromeDriver(o);

Який підхід обрати

Усе залежить від того, чи потрібні проксі облікові дані.

Без авторизації? Достатньо прапорця

Для проксі без авторизації просто додайте --proxy-server=http://host:3128 до ChromeOptions або заповніть об'єкт Proxy у Selenium. Більше нічого не треба.

З авторизацією? Генеруйте розширення

Для проксі з USER:PASS підкладіть крихітне розширення, згенероване на льоту, яке відповідає на onAuthRequired. Воно працює в headless-режимі й однаково поводиться в різних мовах.

HTTP-ендпоінт для браузерів

Беріть proxy.s4m.online:3128 (HTTP). SOCKS5 з авторизацією всередині браузера працює ненадійно, тож SOCKS5 лишіть для CLI та бібліотечних клієнтів.

Тримайте розширення закритим

Згенероване розширення зберігає ваші облікові дані у тимчасовому файлі. Пишіть його у приватний тимчасовий каталог і прибирайте після прогону.

Надійність і чесні очікування

Selenium керує справжнім браузером — це і його сила, і його ціна: він важчий за звичайний HTTP-клієнт, тож тримайте сесії осмисленими й закривайте драйвери одразу. Якщо вам потрібен лише HTML, HTTP-клієнт за проксі обійдеться набагато дешевше — дивіться скрапінг на requests. Selenium беріть тоді, коли потрібні рендеринг JavaScript або справжня взаємодія користувача.

Як завжди, проксі міняє вашу IP, а не фінгерпринт. Проксі s4m — дата-центрові: ідеальні для функціональних тестів, моніторингу й помірного скрапінгу, але на недружніх сайтах вони розпізнаються як дата-центрові. Коли логін чи білий список чекають на одну стабільну адресу, додайте виділену персональну IP. Для нових проєктів придивіться до Playwright: його рідна авторизація проксі знімає всю історію з розширенням. Перевіряйте точки виходу інструментами й почитайте документацію API, щоб автоматизувати ротацію облікових даних.

FAQ

Відповіді на питання

Чому не можна вписати USER:PASS у прапорець проксі Selenium?

Chrome ігнорує облікові дані у прапорці --proxy-server і натомість показує системне вікно авторизації, на яке headless-браузер відповісти не може. Надійний вихід — невелике розширення Chrome, згенероване на льоту, що відповідає на onAuthRequired вашим логіном і паролем.

Чи є простіший спосіб для проксі без авторизації?

Так. Без облікових даних достатньо додати --proxy-server=http://host:3128 до ChromeOptions або заповнити об'єкт Proxy у Selenium на Java. Розширення потрібне тільки тоді, коли проксі вимагає USER:PASS.

Що брати із Selenium — SOCKS5 чи HTTP?

Для браузерів беріть HTTP-ендпоінт на порту 3128. SOCKS5 з авторизацією в браузері працює ненадійно; SOCKS5 лишіть для командного рядка й бібліотечних клієнтів.

З Playwright буде простіше?

Часто так. Playwright приймає облікові дані проксі напряму у своєму об'єкті proxy, тож розширення не потрібне взагалі. Але Selenium лишається правильним вибором, якщо проєкт уже на ньому побудований.

Ганяйте браузери через проксі

Дата-центрові проксі з авторизацією на proxy.s4m.online, готові до Selenium через згенероване розширення. Оплата за трафік, плюс опція виділеної IP для стабільних логінів.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.