clj-webdriverでは任意のブラウザを制御できるので、ChromeのUser-Agentを変更してスマホ用のWebアプリを制御しようとしたが、clj-webdriver 0.6.0 では、Chrome Driver へ Capability を渡すコードがコメントアウトされており、User-Agentの変更ができないようだった。
そこで、該当箇所の関数を再定義して、ChromeでUser-Agentを変更できるようにした。
clj-webdriver-patch.clj
関数を再定義するプログラムは以下の通り。
(require 'clj-webdriver.core)
(ns clj-webdriver.core
(:use [clj-webdriver driver])
(:import org.openqa.selenium.remote.DesiredCapabilities))
(declare new-chrome-driver)
(defn new-driver
"Start a new Driver instance. The `browser-spec` can include `:browser`, `:profile`, and `:cache-spec` keys.
The `:browser` can be one of `:firefox`, `:ie`, `:chrome` or `:htmlunit`.
The `:profile` should be an instance of FirefoxProfile you wish to use.
The `:cache-spec` can contain `:strategy`, `:args`, `:include` and/or `:exclude keys. See documentation on caching for more details."
([browser-spec]
(let [{:keys [browser profile chrome-switches cache-spec]
:or {browser :firefox
profile nil
chrome-switches nil
cache-spec {}}} browser-spec]
(if (= browser :chrome)
(new-chrome-driver chrome-switches)
(init-driver {:webdriver (new-webdriver* {:browser browser
:profile profile})
:cache-spec cache-spec})))))
(defn new-chrome-driver
[chrome-switches]
(let [cap (DesiredCapabilities/chrome)]
;; for Linux
(.setCapability cap "chrome.binary" "/usr/lib/chromium-browser/chromium-browser")
(if chrome-switches
(.setCapability cap "chrome.switches" (into-array chrome-switches)))
(init-driver (ChromeDriver. cap))))
サンプルコード
User-Agentを iPhone-3G にするコードを以下に示す。
http://code.google.com/p/chromedriver/downloads/list から Chrome Driver をダウンロードし、任意の場所に解凍しておく。
Chrome Driver実行ファイルのパスは以下のコードの (System/setProperty 〜) で設定する。
(ns webdriver-test.core
(:require [clj-webdriver.taxi :as taxi]))
;; Driver path
(System/setProperty "webdriver.chrome.driver" "/home/hogehoge/opt/chromedriver")
;; (System/setProperty "webdriver.ie.driver" "set ie driver path")
(def ^:dynamic *ua-iPhone-3G* "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5B108 Safari/525.20")
(defn open-browser
"Open browser."
[browser]
(taxi/set-driver! {:browser browser}))
(defn user-agent-switch [user-agent]
(str "--user-agent=\"" user-agent "\""))
(defn open-chrome [url]
(taxi/set-driver! {:browser :chrome
:chrome-switches [(user-agent-switch *ua-iPhone-3G*)]}
url))
(open-chrome "https://www.google.com/") を実行すると スマホ用のGoogleトップを表示できる。