Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

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

Задача: запустить браузер с подключение через прокси для подключения к которому необходимо проходить аутентификацию.

Для установки прокси в браузере вручную, прописываю адрес и порт в настройках соединения браузера. После этого, при первом доступе к любому серверу в браузере вылезает диалоговое окно для прохождения авторизации (basic authorization). После ее прохождения все запросы проходят через прокси.
В селениуме пробовал делать так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy(":@

:"); proxy.setSslProxy(":@
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается , а порт дэфолтный ( ноль ). Если дописать http://, то вместо адреса вставляется http, а порт ноль.

И еще, пробовал так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке WebDriver driver = new FirefoxDriver(capabilities);) появляется диалоговое окно с текстом Прокси «moz-proxy://
:» запрашивает имя пользователя и пароль. Сайт сообщает: «proxy» и полями для ввода логина и пароля, выполнение программы приостанавливается, что не дает возможность воспользоваться созданным объектом driver для переключения на окно и ввести логин и пароль (driver.switchTo().alert()....).

Также нагуглил вариант:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); proxy.setSocksUsername(""); proxy.setSocksPassword(""); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
Но результат такой-же как и во втором случае.

Работать должно как минимум в 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("network.proxy.ssl", "
"); profile.setPreference("network.proxy.ssl_port", ); capabilities.setCapability(FirefoxDriver.PROFILE, profile); org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setProxyType(ProxyType.MANUAL); proxy.setSocksUsername(""); proxy.setSocksPassword(""); 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(""); 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); } }

Комментариев нет:

Отправить комментарий