Автентифікація проксі-сервера в Selenium стає складною, коли браузер, а не веб-сторінка, запитує ім'я користувача та пароль. Правильне рішення залежить від типу проксі-сервера, браузера, версії Selenium та того, чи можна надати облікові дані поза тестом. У цьому посібнику пояснюються надійні підходи Selenium 4, де старіші способи вирішення все ще підходять, і чому код обробки сповіщень часто дає збій.

Що таке проксі?

Проксі-сервер – це посередник, який надсилає запити до веб-сайтів від імені вашого браузера. Приймач бачить IP-адресу проксі-сервера, а не машину, на якій запущено Selenium. Команди тестування використовують проксі-сервери для перевірки регіонального досвіду, маршрутизації трафіку через контрольовані мережі, перевірки запитів або розподілу автоматизованих робочих навантажень.

URL-адреса проксі-сервера зазвичай містить хост і порт, наприклад proxy.example.test:8080Приватні сервіси також можуть вимагати ім'я користувача та пароль. Selenium може налаштувати кінцеву точку проксі через параметри браузера, але запити автентифікації контролюються браузером і не завжди відображаються в WebDriver, як звичайна HTML-форма.

Виберіть відповідну мережу: Статичні адреси зручні для створення білого списку, тоді як ротаційні мережі підходять для масштабного збору даних. Наші посібник з постачальників послуг проксі-сервісів для резидентів пояснює практичні відмінності.

Використовуйте автоматизацію лише там, де у вас є дозвіл, дотримуйтесь умов веб-сайту та не допускайте використання облікових даних у вихідному коді та журналах тестування.

Різниця між SOCKS і HTTP Proxy

HTTP-проксі розуміють веб-трафік і зазвичай налаштовуються з окремими значеннями HTTP та HTTPS. SOCKS-проксі працюють на нижчому рівні та можуть передавати різні види TCP-трафіку без інтерпретації протоколу програми. SOCKS5 також підтримує автентифікацію та зазвичай є кращою версією SOCKS.

ХарактеристикаПроксі-сервер HTTP/HTTPSSOCKS5 проксі
ТрафікРозроблено для веб-запитів браузераПрацює з багатьма програмами на основі TCP
Обізнаність з протоколомРозуміє HTTP-запити та заголовкиПересилає трафік без зчитування HTTP-семантики
Налаштування селенуВстановіть поля проксі-сервера HTTP та SSLВстановлення кінцевої точки та версії SOCKS
Типове використанняВеб-тестування, фільтрація, кешування, інспекціяГнучке тунелювання та не-HTTP-трафік

Браузер та проксі-сервер повинні підтримувати один і той самий метод. Дійсна кінцева точка не гарантує, що Selenium зможе автоматично завершити діалогове вікно введення імені користувача/пароля.

Як керувати проксі-сервером у Selenium Webdriver у Chrome

Для проксі-сервера, який не потребує інтерактивної автентифікації, Selenium 4 може призначити Proxy заперечувати проти ChromeOptions. Поточний Офіційна документація з налаштувань браузера Selenium демонструє цей підхід, заснований на можливостях.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

Proxy proxy = new Proxy();
proxy.setHttpProxy("proxy.example.test:8080");
proxy.setSslProxy("proxy.example.test:8080");

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);
driver.get("https://example.com");

Для SOCKS5 встановіть кінцеву точку та версію SOCKS:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

Автентифіковані проксі-сервери потребують додаткового планування. Вбудовування облікових даних в URL-адресу може бути відхилено сучасними браузерами та може розкрити секрети. Віддавайте перевагу таким підходам:

  1. Список дозволених IP-адрес: авторизуйте фіксовану публічну IP-адресу вашого CI-бігуна або вузла Selenium Grid, щоб не з'являлося діалогове вікно браузера.
  2. Локальний шлюз: Розмістіть довірений проксі-сервер для переадресації на тестовій машині. Selenium підключається локально без облікових даних, а шлюз автентифікується вище за течією.
  3. Контрольоване розширення браузера: створити внутрішнє розширення Chrome, яке налаштовує проксі-сервер і відповідає на запити автентифікації. Завантажувати його лише із захищеного тестового артефакту.
  4. Конфігурація на рівні сітки: налаштувати мережу та секрети на вузлі Selenium, а не розповсюджувати облікові дані для кожного тесту.

Зчитуйте облікові дані з менеджера секретів або тестової конфігурації, специфічної для середовища. Ніколи не передавайте їх до Git, не виводьте їх у консоль і не додавайте до скріншотів. Після запуску перевірте вихідну IP-адресу за допомогою затвердженої кінцевої точки тестування, перш ніж продовжувати роботу з набором.

Поширена несправність: ERR_PROXY_CONNECTION_FAILED зазвичай вказує на неправильний хост, порт, протокол або мережевий шлях. Повторюється 407 Proxy Authentication Required відповіді вказують на відсутність або відхилення облікових даних.

Використання інструменту AutoIt

AutoIt може автоматизувати діалогові вікна Windows, знаходячи вікно, вводячи облікові дані та натискаючи кнопку. Колись це було поширеним обхідним рішенням Selenium, оскільки WebDriver не міг керувати вікнами автентифікації, що належать браузеру.

Цей метод є крихким: він працює лише у Windows, вимагає розблокованого інтерактивного робочого столу, залежить від заголовків вікон та часу, і зазвичай не працює в безголових контейнерах або віддалених агентах неперевершеної інтеграції. Він також може розкривати паролі через скрипти або аргументи процесу.

Якщо застаріле середовище не залишає альтернативи, скомпілюйте скрипт AutoIt, збережіть його в контрольованому місці артефактів тестування, безпечно отримайте облікові дані під час виконання та чекайте на саме діалогове вікно, а не використовуйте фіксований режим сну. Обмежте цей метод ізольованим виконавцем Windows. Для підтримуваних пакетів безпечнішим вибором є створення білого списку IP-адрес, шлюз або централізовано налаштовані вузли Grid.

Використання сповіщень

Selenium може обробляти сповіщення JavaScript, створені кодом веб-сторінки:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

Однак, діалогове вікно автентифікації проксі-сервера зазвичай відображається у браузері Chrome, а не у вигляді сповіщення JavaScript. Тому driver.switchTo().alert() часто кидає NoAlertPresentException навіть коли видно запит на введення облікових даних. Таке саме обмеження стосується багатьох діалогових вікон базової автентифікації HTTP.

Використовуйте API сповіщень лише після підтвердження того, що WebDriver розпізнає запит. Якщо ні, видаліть запит через конфігурацію мережі або скористайтеся одним із описаних вище підходів автентифікованого проксі. Це стабільніше, ніж координація натискань клавіш з вікном, яке Selenium не може перевірити.

Поширені запитання

Чи може Selenium безпосередньо встановити проксі-сервер?

Так. Selenium 4 може передавати налаштування HTTP, SSL або SOCKS через параметри браузера та можливості проксі-сервера. Це налаштовує кінцеву точку, але може не завершити запит на автентифікацію, що належить браузеру.

Чому username:password@host:port не працює в Chrome?

Сучасні браузери можуть блокувати облікові дані, вбудовані в URL-адреси, а синтаксис може розкривати секрети в журналах та історії. Натомість використовуйте список дозволених IP-адрес, безпечний шлюз або контрольовану тестову інфраструктуру.

Чи може Selenium обробляти вхід через проксі-сервер за допомогою switchTo().alert()?

Зазвичай ні. Автентифікація проксі-сервера зазвичай здійснюється через інтерфейс браузера, а не через сповіщення JavaScript, тому WebDriver може повідомляти, що сповіщення відсутнє.

Чи працює проксі-автентифікація в Chrome без headless?

Це може працювати, коли автентифікація вирішується без інтерактивного запиту. Список дозволених IP-адрес, локальний шлюз або конфігурація на рівні вузла краще підходять для безголового виконання.

Чи варто використовувати AutoIt для автентифікації проксі-сервера Selenium?

Використовуйте його лише для обмеженого робочого процесу застарілої версії Windows. Він крихкий у неперервній інтеграції та менш безпечний, ніж видалення діалогового вікна через конфігурацію мережі.

Який тип проксі-сервера найкраще підходить для автоматизації браузера?

Це залежить від авторизованого завдання. HTTP-проксі прості для веб-трафіку, SOCKS5 гнучкий, а житлові мережі можуть допомогти з тестуванням місцезнаходження. Порівняйте варіанти в нашому посібнику з типів проксі-серверів.