簡體   English   中英

Elixir & Hound 無頭瀏覽器

[英]Elixir & Hound headless browser

當您需要無頭瀏覽器時, Hound非常適合測試 web 應用程序等。 我得到它的工作,玩弄測試等,但有 2 個關於獵犬的問題,也許有人可以解釋誰熟悉 Elixir :)

1.)我正在使用 PhantomJS 的遠程 WebDriver 模式(本地主機上的phantoms -w )。 我在 config.exs 中設置了 'config:hound, driver: "phantomjs"' 所以一個簡單的 "navigate_to @url" 啟動了一個 PhantomJS 實例並正常工作。現在我想為此請求更改 HTTP 用戶代理字符串。PhantomJS 提供此 page.settings hash. 在遠程 WebDriver 模式下對本地 PhantomJS 運行上述請求會顯示以下設置:

[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怎么改? 我沒有找到任何處理這個問題的例子。 我知道使用適當的 JS 配置直接將 PhantomJS 實例作為 CLI 工具運行會是什么樣子,但不確定 hound 是如何管理它的。

2.) 我還需要使用 HTTP 代理進行身份驗證。 與 1 相同。我知道如何處理從命令行啟動 PhantomJS,但是定義它們在 hound 上運行的正確位置是什么?

您應該將map作為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的答案對我不起作用,但我可以通過設置以下內容來設置用戶代理。

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"} ,必須使用 atom: :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 (selenium) 中配置:

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

用法(iex):

Example.Test.get_github_home()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM