Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2015, 18:09   #1
[CODER]
Форумчанин
 
Аватар для [CODER]
 
Регистрация: 02.02.2010
Сообщений: 305
По умолчанию Использовать прокси с авторизацией в 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);
В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается `<login>`, а порт дэфолтный ( ноль ). Если дописать `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);
В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке `WebDriver driver = new FirefoxDriver(capabilities);`) появляется диалоговое окно с текстом `Прокси «moz-proxy://<address>:<port>» запрашивает имя пользователя и пароль. Сайт сообщает: «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);
Но результат такой-же как и во втором случае.

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

Работать должно как минимум в Firefox, а в идеале еще и в PhantomJS. В принципе, не будет лишней поддержка Chrome, но это не обязательно.


П. С. Заголовок темы должен быть примерно таким: "Использовать прокси с авторизацией, через Selenium на java"
Skype: CODERua

Последний раз редактировалось [CODER]; 12.12.2015 в 20:57. Причина: дописал П. С.
[CODER] вне форума Ответить с цитированием
Старый 13.12.2015, 21:27   #2
[CODER]
Форумчанин
 
Аватар для [CODER]
 
Регистрация: 02.02.2010
Сообщений: 305
По умолчанию

Неужели никто не сталкивался с таким?

Я пробовал использовать еще такой вариант:

Код:
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("http://2ip.ru");` , браузер при этом ожидает ответ от 2ip.ru, до тех пор пока я не введу вручную данные для авторизации прокси, если авторизация не удалась, то вместо запрошенной страницы получаю сообщение - "Прокси-сервер отказывается принимать соединения".


Вопрос: как можно получить доступ к окну авторизации для дальнейшего ввода логина и пародя или как пройти авторизацию на прокси сервере не выводя окно для авторизации ( примерно как я пробовал: proxy.setSocksUsername("<login>"); proxy.setSocksPassword("<password>" ); )?
Skype: CODERua
[CODER] вне форума Ответить с цитированием
Старый 14.12.2015, 07:37   #3
[CODER]
Форумчанин
 
Аватар для [CODER]
 
Регистрация: 02.02.2010
Сообщений: 305
По умолчанию

Решение через жо**, точнее через 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);
    }
}
Skype: CODERua

Последний раз редактировалось [CODER]; 14.12.2015 в 07:55.
[CODER] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XE5 webbrowser прокси с авторизацией albionseo Компоненты Delphi 2 02.01.2015 11:34
[Indy]Прокси с авторизацией, Connection Closed Gracefully bakanaev Общие вопросы Delphi 4 19.05.2013 17:42
Delphi Webbrowser прокси с авторизацией nikita321 Общие вопросы Delphi 0 13.01.2013 17:33
Протестировать работу с авторизацией на прокси Alter Софт 3 23.05.2012 11:40
Selenium RC & Java Sheril Помощь студентам 1 27.06.2010 17:54