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()