Удостоверяването чрез прокси в Selenium става трудно, когато браузърът, а не уеб страницата, поиска потребителско име и парола. Правилното решение зависи от типа на прокси сървъра, браузъра, версията на Selenium и дали идентификационните данни могат да бъдат предоставени извън теста. Това ръководство обяснява надеждните подходи на Selenium 4, къде по-старите решения все още са подходящи и защо кодът за обработка на предупреждения често се проваля.

Какво е прокси?

Прокси сървърът е посредник, който изпраща заявки към уебсайтове от името на вашия браузър. Целевата точка вижда IP адреса на прокси сървъра, вместо машината, на която работи Selenium. Екипите за тестване използват прокси сървъри, за да валидират регионални преживявания, да насочват трафика през контролирани мрежи, да проверяват заявките или да разпределят автоматизирани натоварвания.

URL адресът на прокси сървъра обикновено съдържа хост и порт, като например proxy.example.test:8080Частните услуги може също да изискват потребителско име и парола. Selenium може да конфигурира прокси крайната точка чрез опциите на браузъра, но подканите за удостоверяване се контролират от браузъра и не винаги са достъпни за WebDriver като обикновен HTML формуляр.

Изберете подходяща мрежа: Статичните адреси са удобни за добавяне в разрешени списъци, докато ротиращите мрежи са подходящи за мащабно събиране. Нашите ръководство за доставчици на жилищни прокси сървъри обяснява практическите разлики.

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

Разлика между SOCKS и HTTP прокси

HTTP прокси сървърите разбират уеб трафика и обикновено са конфигурирани с отделни HTTP и HTTPS стойности. SOCKS прокси сървърите работят на по-ниско ниво и могат да пренасят различни видове TCP трафик, без да интерпретират протокола на приложението. SOCKS5 допълнително поддържа удостоверяване и обикновено е предпочитаната SOCKS версия.

ХарактеристикаHTTP/HTTPS проксиSOCKS5 прокси
ТрафикПроектиран за уеб заявки на браузъраРаботи с множество TCP-базирани приложения
Осведоменост за протоколаРазбира HTTP заявки и заглавкиПренасочва трафика без четене на HTTP семантиката
Настройка на селенЗадаване на полета за HTTP и SSL проксиЗадайте крайната точка и версията на SOCKS
Типична употребаУеб тестване, филтриране, кеширане, инспекцияГъвкаво тунелиране и трафик, различен от HTTP

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

Как да се справим с прокси сървъра в Selenium Webdriver в Chrome

За прокси, който не изисква интерактивно удостоверяване, Selenium 4 може да присвои a 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 runner или Selenium Grid възел, така че да не се появява диалогов прозорец на браузъра.
  2. Локален шлюз: Поставете надежден прокси сървър за пренасочване на тестовата машина. Selenium се свързва локално без идентификационни данни, а шлюзът се удостоверява нагоре по веригата.
  3. Контролирано разширение на браузъра: Създайте вътрешно разширение за Chrome, което конфигурира прокси сървъра и отговаря на предизвикателства за удостоверяване. Зареждайте го само от защитен тестов артефакт.
  4. Конфигурация на ниво мрежа: конфигурирайте мрежа и тайни на възела Selenium, вместо да разпространявате идентификационни данни за всеки тест.

Четете идентификационни данни от секретен мениджър или специфична за средата тестова конфигурация. Никога не ги предавайте в Git, не ги отпечатвайте в конзолния изход и не ги включвайте в екранни снимки. След стартиране, проверете изходния IP адрес с одобрена крайна точка за тестване, преди да продължите с пакета.

Често срещан неуспех: ERR_PROXY_CONNECTION_FAILED обикновено показва, че хостът, портът, протоколът или мрежовият път са грешни. Повтарящо се 407 Proxy Authentication Required отговорите показват липсващи или отхвърлени идентификационни данни.

Използване на инструмента AutoIt

AutoIt може да автоматизира диалогови прозорци на Windows, като локализира прозорец, въвежда идентификационни данни и натиска бутон. Някога това беше често срещано решение за Selenium, тъй като WebDriver не можеше да управлява прозорци за удостоверяване, собственост на браузъра.

Методът е крехък: е само за Windows, изисква отключен интерактивен работен плот, зависи от заглавията и времето на прозорците и обикновено се проваля в контейнери без графичен интерфейс или отдалечени CI агенти. Може също така да разкрие пароли чрез скриптове или аргументи на процеси.

Ако една остаряла среда не оставя алтернатива, компилирайте скрипта 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 настройки чрез опциите на браузъра и възможностите за прокси. Това конфигурира крайната точка, но може да не завърши подканата за удостоверяване, собственост на браузъра.

Защо потребителско име:парола@хост:порт не работи в Chrome?

Съвременните браузъри могат да блокират вградени в URL адреси идентификационни данни, а синтаксисът може да разкрие тайни в регистрационни файлове и история. Вместо това използвайте списък с разрешени IP адреси, защитен шлюз или контролирана тестова инфраструктура.

Може ли Selenium да обработва вход през прокси сървър със switchTo().alert()?

Обикновено не. Удостоверяването на прокси сървъра обикновено е чрез потребителския интерфейс на браузъра, а не чрез JavaScript предупреждение, така че WebDriver може да съобщи, че не съществува предупреждение.

Работи ли прокси удостоверяването в Chrome без графичен интерфейс?

Може да работи, когато удостоверяването е разрешено без интерактивно подканване. Списъкът с разрешени IP адреси, локалният шлюз или конфигурацията на ниво възел са по-подходящи за изпълнение без headless.

Трябва ли да използвам AutoIt за удостоверяване на прокси сървър чрез Selenium?

Използвайте го само за ограничен работен процес в наследени Windows системи. Той е крехък в CI и по-малко сигурен от елиминирането на диалоговия прозорец чрез мрежова конфигурация.

Кой тип прокси е най-подходящ за автоматизация на браузъра?

Зависи от оторизираната задача. HTTP прокситата са лесни за уеб трафик, SOCKS5 е гъвкав, а жилищните мрежи могат да помогнат с тестване на местоположението. Сравнете опциите в нашето ръководство за типове прокси.