@CODER_ua

Как использовать прокси с авторизацией, через Selenium на java?

Для установки прокси в браузере вручную, прописываю адрес и порт в настройках соединения браузера. После этого, при первом доступе к любому серверу в браузере вылезает диалоговое окно для прохождения авторизации (basic authorization). После ее прохождения все запросы проходят через прокси.

--------------

В селениуме пробовал делать так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
    proxy.setHttpProxy("<login>:<password>@<address>:<port>");
    proxy.setSslProxy("<login>:<password>@<address>:<port>");
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability(CapabilityType.PROXY, proxy);
    WebDriver driver = new FirefoxDriver(capabilities);
    driver.get("http://2ip.ru");


В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается ``, а порт дэфолтный ( ноль ). Если дописать `http://`, то вместо адреса вставляется `http`, а порт ноль.

--------------

И еще, пробовал так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
    proxy.setHttpProxy("<address>:<port>");
    proxy.setSslProxy("<address>:<port>");
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability(CapabilityType.PROXY, proxy);
    WebDriver driver = new FirefoxDriver(capabilities);
    driver.get("http://2ip.ru");


В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке `WebDriver driver = new FirefoxDriver(capabilities);`) появляется диалоговое окно с текстом `Прокси «moz-proxy://:» запрашивает имя пользователя и пароль. Сайт сообщает: «proxy»` и полями для ввода логина и пароля, выполнение программы приостанавливается, что не дает возможность воспользоваться созданным объектом `driver` для переключения на окно и ввести логин и пароль (`driver.switchTo().alert()....`).

--------------

Также нагуглил вариант:

org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
    proxy.setHttpProxy("<address>:<port>");
    proxy.setSslProxy("<address>:<port>");
    proxy.setSocksUsername("<login>");
    proxy.setSocksPassword("<password>");
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability(CapabilityType.PROXY, proxy);
    WebDriver driver = new FirefoxDriver(capabilities);
    driver.get("http://2ip.ru");


Но результат такой-же как и во втором случае.

--------------
Пробовал использовать еще такой вариант:
DesiredCapabilities capabilities = new DesiredCapabilities(); // DesiredCapabilities.firefox();
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.proxy.type", 1);
profile.setPreference("signon.autologin.proxy" , true);
profile.setPreference("network.websocket.enabled", false);
profile.setPreference("network.proxy.share_proxy_settings", false);
profile.setPreference("network.automatic-ntlm-auth.allow-proxies", false);
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.auth.use-sspi", false);
profile.setPreference("network.proxy.http", "<address>");
profile.setPreference("network.proxy.http_port", <port>);
profile.setPreference("network.proxy.ssl", "<address>");
profile.setPreference("network.proxy.ssl_port", <port>);
capabilities.setCapability(FirefoxDriver.PROFILE,  profile);
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setProxyType(ProxyType.MANUAL);
proxy.setSocksUsername("<login>");
proxy.setSocksPassword("<password>");
capabilities.setCapability(CapabilityType.PROXY, proxy);
WebDriver driver = new FirefoxDriver(capabilities);
driver.get("http://2ip.ru");


Если устанавливать конфигурацию прокси через профайл фаерфокса ( profile.setPreference(...) ), то окно для авторизации через прокси появляется немного раньше окна браузера (браузер запускается примерно за 1 секунду, а окно для авторизации появляется примерно на пол секунды раньше) и при этом, в отличии от вариантов реализации из предыдущего сообщения, не блокирует главное окно (которое запускается/отображается немножко позже). Также в этом варианте выполнение программы не приостанавливается на строке создания драйвера (`new FirefoxDriver(capabilities);`). Программа приостанавливается на строке `driver.get("2ip.ru");` , браузер при этом ожидает ответ от 2ip.ru, до тех пор пока я не введу вручную данные для авторизации прокси, если авторизация не удалась, то вместо запрошенной страницы получаю сообщение - "Прокси-сервер отказывается принимать соединения".

Вопрос: как можно получить доступ к окну авторизации для дальнейшего ввода логина и пародя или как пройти авторизацию на прокси сервере не выводя окно для авторизации ( примерно как я пробовал: proxy.setSocksUsername(""); proxy.setSocksPassword("" ); )?
  • Вопрос задан
  • 4183 просмотра
Пригласить эксперта
Ответы на вопрос 3
Можно было установить локальный прокси без авторизации, на котором парентом прописать прокси с авторизацией. В 3proxy
auth iponly
allow *
parent 1000 http ip_proxy port_proxy login password
proxy -i127.0.0.1 -p3128
Ответ написан
Комментировать
@CODER_ua Автор вопроса
Решил через AutoItX4Java:
private void mozProxyAuth(String login, String password) {
        String JACOB_DLL_TO_USE = System.getProperty("sun.arch.data.model").contains("32") ? "jacob-1.18-x86.dll" : "jacob-1.18-x64.dll";
        File file = new File(System.getProperty("user.dir"), JACOB_DLL_TO_USE);
        System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());
        AutoItX x = new AutoItX();
        if (x.winWait("Требуется аутентификация", null, 10)) {
            x.winActivate("Требуется аутентификация");
            x.send(login + "{TAB}" + password + "{ENTER}", false);
        }
    }
Ответ написан
Комментировать
@san_lex
Чтобы задать проксик, в том числе и с авторизацией, достаточно "скормить" фантому такой js-скрипт :

phantom.setProxy('адрес прокси', 'порт, 'http', ''логин, 'пароль');

Работает начиная с версии phantomjs 2.0. В более ранних - не проверял.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы