2015-03-08 5 views
2

Я использую изображения Docker Selenium для запуска узлов браузера, репо доступно здесь https://github.com/SeleniumHQ/docker-selenium. Нет документации о том, как config.json может использоваться для предоставления значений прокси.Как запустить узлы хрома селена с использованием прокси-сервера?

Я использую Selenium версии 2.44.0.

В моей инфраструктуре есть определенные активы, которые получены из местоположения, для которого требуется прокси-конфигурация в браузере для доступа к ним. Я пытаюсь установить прокси на хром-узел. В соответствии с этим documentation here, прокси-сервер может быть настроен как следующее:

java -jar selenium-2.44.0.jar -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80 

Мой прокси-сервер не требует, usename и пароль поэтому я игнорировал эти ценности. В документации SeleniumHQ четко не указано, нужна ли конфигурация прокси-сервера как на узле, так и на узлах или только на узлах. Я пробовал разные комбинации, но не работал для меня.

Фактические команды я бегу являются:

Для Hub:

java -jar /opt/selenium/selenium-server-standalone.jar -role hub -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80 -hubConfig /opt/selenium/hubconfig.json 

Когда я запускаю команду выше, я могу видеть -Д * значения отображается на консоли конфигурации.

Для узла:

xvfb-run --server-args=":99.0 -screen 0 1360x1020x24 -ac +extension RANDR" java -jar /opt/selenium/selenium-server-standalone.jar -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80 -role node -hub http://$HUB_PORT_4444_TCP_ADDR:$HUB_PORT_4444_TCP_PORT/grid/register -nodeConfig /opt/selenium/config.json 

Когда я запускаю эту команду можно увидеть значение прокси-сервера на консоли еще раз, но я активы не загружаются браузером.

Кроме того, на боковой ноте кажется, что это может быть сделано на стороне разработчиков (in java code), но я очень хочу ее решить на моей (операционной) стороне.

+0

Вы получили ответ? – hawkeye

+0

Мы закончили белую сетку. –

ответ

1

Спасибо - вот что мы получили:

Сначала вам нужен способ, чтобы подтвердить свой settings made it into the browser.

chrome://net-internals/proxyservice.config#proxy

Фактическая инструкция командной строки:

/chromeexec --proxy="http=http://proxyserver:port/;https=http://proxyserver:port/" 

Обратите внимание, что колоны взорвется в командной строке Баш, если не использовать двойные кавычки.

Теперь, если вы отправляете это из кода Java WebDriver программно - вам придется бежать из двойных кавычек - так что настройки прокси-сервер в Java могут выглядеть следующим образом:

org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); 
proxy.setHttpProxy("\"http://proxyserver:port/\"") 

В качестве альтернативы вы можете передайте это как параметр выполнения.

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.switches", Arrays.asList("--proxy \"http=http://proxyserver:port/;https=http://proxyserver:port/\"")); 
WebDriver driver = new ChromeDriver(capabilities); 

Теперь ваш вопрос о происхождении был связан с доступом к внешним ресурсам с помощью прокси. То, что мы сделали (аналогично вашему вопросу), состояло в том, чтобы передать исключение прокси для сайта, на который мы наносили удары, чтобы внешние ресурсы проходили через прокси.

Итак вы добавить исключение для вашего основного сайта - если ресурс является 10.1.10.5 то он выглядит:

--proxy-bypass-list=10.1.10.5 

Что мы делаем в коде, как:

capabilities.setCapability("chrome.switches", Arrays.asList("--proxy=\"http=http://proxyserver:port/;https=http://proxyserver:port/\"" "--proxy-bypass-list=10.1.10.5")); 

Обратите внимание, что установка имя пользователя и пароль: a bug in Chrome. (Пожалуйста, назовите это, если это вас задержит.)

Если вам нужно имя пользователя и пароль, тогда решение будет a PAC file.

синтаксис:

--proxy-pac-url=file:///proxy.pac 

Формат файла выглядит следующим образом:

if (host == "mylocalserver.com") 
{ 
    return 'DIRECT'; 
} else { 
    return return "PROXY wcg2.example.com:8080 "; 
} 

Для случая имен пользователей и паролей в настройках прокси-сервера, обратите внимание the following:

Proxy Auto -конфигурационные файлы не поддерживают жестко заданные имена пользователей и пароли. Есть и веские аргументы в пользу этого, поскольку предоставление поддержки жестко закодированных учетных данных откроет значительные дыры в безопасности, так как любой сможет легко просмотреть требуемые учетные данные для доступа к прокси.

Скорее настройте прокси как прозрачный прокси-сервер, таким образом вам не понадобятся имя пользователя и пароль. Вы упомянули в одном из своих комментариев, что прокси-сервер находится за пределами вашей локальной сети, поэтому вам требуется аутентификация. Однако большинство прокси-серверов поддерживают правила, основанные на исходном IP-адресе, и в этом случае просто разрешить запросы, исходящие из вашей корпоративной сети.

Первоначальная спецификация автоконфигурации прокси-сервера была первоначально разработана Netscape в 1996 году. Оригинальная спецификация больше не доступна напрямую, но вы все равно можете получить к ней доступ, используя The Wayback Machine's archived copy. Спецификация не сильно изменилась и по-прежнему в значительной степени совпадает с первоначальной. Вы увидите, что спецификация довольно проста и что нет никаких условий для жестко запрограммированных учетных данных.

Чтобы решить эту проблему - вы можете использовать этот инструмент:

https://github.com/sjitech/proxy-login-automator

Этот инструмент может создать локальный прокси-сервер и автоматически вводить пользователя/пароль для реального прокси-сервера. Поддержка скрипта PAC.

Смежные вопросы