Elixir & Hound безголовый браузер

Hound отлично подходит для тестирования веб-приложений и т. Д., Когда вам нужен безголовый браузер. Я получил его, поиграл с тестами и т. Д., Но есть 2 вопроса о гончей, которые, возможно, кто-то может объяснить, кто знаком с Elixir:)

1.) Я использую удаленный режим WebDriver PhantomJS (phantoms -w на локальном хосте). Я установил 'config:hound, driver: "phantomjs" "в config.exs, чтобы простой" navigate_to @url "запускал экземпляр PhantomJS и работал правильно. Теперь я хочу изменить строку HTTP User Agent для этого запроса. PhantomJS предоставляет this page.settings hash. Выполнение вышеуказанного запроса к локальному PhantomJS в режиме удаленного WebDriver показывает мне следующие настройки:

[INFO  - 2014-08-24T21:54:00.232Z] Session [27b92460-2bd9-11e4-a77f-1daa5df28587] - 
page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,
"loadImages":true,"localToRemoteUrlAccessEnabled":false,
"userAgent":"Mozilla/5.0 (Macintosh; PPC Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34","webSecurityEnabled":true}
[INFO  - 2014-08-24T21:54:00.232Z] Session [27b92460-2bd9-11e4-a77f-1daa5df28587] - page.customHeaders:  - {}
[INFO  - 2014-08-24T21:54:00.232Z] Session [27b92460-2bd9-11e4-a77f-1daa5df28587] - Session.negotiatedCapabilities -
{"browserName":"phantomjs","version":"1.9.7","driverName":"ghostdriver","driverVersion":"1.1.0",
"platform":"mac-unknown-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,
"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,
"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct”}}

Вопрос: как сменить userAgent выше? Я не нашел ни одного примера, который бы занимался этим. Я знаю, как это будет выглядеть, если запускать экземпляр PhantomJS напрямую как инструмент CLI с соответствующей конфигурацией JS, но не уверен, как гончая справляется с этим.

2.) Мне также нужно использовать HTTP прокси с аутентификацией. То же, что и в 1. Я знаю, как справиться с этим запуском PhantomJS из командной строки, но как правильно определить, что они запускаются поверх гончей?

3 ответа

Вы должны передать карту в качестве параметра Additional_capabilities любой функции, которая запускает сеанс.

Hound.start_session(%{userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"})

Для параметра прокси значение должно быть другой картой со свойствами.

Hound.start_session(%{proxy: %{property: "parameter", property: "parameter"}})

Я никогда не использовал его с прокси, поэтому я не уверен, как правильно его настроить.

Я потратил немало времени, пытаясь заставить это работать. Ответ от cevado у меня не сработал, но я смог настроить user-agent, установив следующее.

Hound.start_session(%{"phantomjs.page.settings.userAgent" => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"})

Надеюсь это поможет.

Кроме того:

  • согласно документации текущей версии ->{:hound, "~> 1.0"}, атом::user_agentдолжен быть использован:

            Hound.start_session(%{user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"})
    

Конфиг вconfig/config.exs(селен):

      config :hound, driver: "chrome_driver", browser: "chrome_headless"

Пример модуля для целей тестирования:

      defmodule Example.Test do
  use Hound.Helpers

  def get_github_home() do
    Hound.start_session(%{user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"})
    navigate_to("https://www.github.com/")
    
    IO.inspect(page_source())
    
    Hound.end_session()
  end
end

Использование (например):

      Example.Test.get_github_home()
Другие вопросы по тегам