Задача: запустить браузер с подключение через прокси для подключения к которому необходимо проходить аутентификацию.
Для установки прокси в браузере вручную, прописываю адрес и порт в настройках соединения браузера. После этого, при первом доступе к любому серверу в браузере вылезает диалоговое окно для прохождения авторизации (basic authorization). После ее прохождения все запросы проходят через прокси.
В селениуме пробовал делать так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy("
В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается
И еще, пробовал так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy(":
В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке WebDriver driver = new FirefoxDriver(capabilities);) появляется диалоговое окно с текстом Прокси «moz-proxy://:
Также нагуглил вариант:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy(":
Но результат такой-же как и во втором случае.
Работать должно как минимум в Firefox, а в идеале еще и в PhantomJS. В принципе, не будет лишней поддержка Chrome, но это не обязательно.
Update
Неужели никто не сталкивался с таким?
Я пробовал использовать еще такой вариант:
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", "");
profile.setPreference("network.proxy.http_port",
Если устанавливать конфигурацию прокси через профайл фаерфокса ( profile.setPreference(...) ), то окно для авторизации через прокси появляется немного раньше окна браузера (браузер запускается примерно за 1 секунду, а окно для авторизации появляется примерно на пол секунды раньше) и при этом, в отличии от вариантов реализации из предыдущего сообщения, не блокирует главное окно (которое запускается/отображается немножко позже). Также в этом варианте выполнение программы не приостанавливается на строке создания драйвера (new FirefoxDriver(capabilities);). Программа приостанавливается на строке driver.get("http://2ip.ru"); , браузер при этом ожидает ответ от 2ip.ru, до тех пор пока я не введу вручную данные для авторизации прокси, если авторизация не удалась, то вместо запрошенной страницы получаю сообщение - "Прокси-сервер отказывается принимать соединения".
Вопрос: как можно получить доступ к окну авторизации для дальнейшего ввода логина и пародя или как пройти авторизацию на прокси сервере не выводя окно для авторизации ( примерно как я пробовал: proxy.setSocksUsername(""); proxy.setSocksPassword("" ); )?
Ответ
Решил через 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);
}
}
Комментариев нет:
Отправить комментарий