[Clojure] clj-webdriverでChromeのUser-Agentを変更する方法 でUser-Agentを変更する方法を書いたが、先日、最新のChromeとchromedriverを使ってみると、User-Agentが変更できなくなっていた。
原因を調べてみると、DesiredCapabilitiesオブジェクトにchrome.switchesを追加しても、Chromeの起動オプションに追加されなくなっていた。
起動オプションの追加方法が変更されたようで、ChromeOptions#addArgumentsを使うと問題なく動作した。
実行環境
- Windows 8
- clj-webdriver 0.6.0
- chromedriver 2.4
chromedriver 2.4 は
こちらからダウンロードした。
従来のダウンロード先にあったドライバは全てdeprecatedになっており、
http://code.google.com/p/chromedriver/wiki/WheredAllTheDownloadsGo?tm=2 では、以下の説明があった。
Downloads have been moved to
http://chromedriver.storage.googleapis.com/index.html, because Google Code downloads are being
deprecated!
project.clj
次のライブラリをdependenciesに追加した。
[clj-webdriver "0.6.0"]
[org.seleniumhq.selenium/selenium-java "2.35.0"]
src/cli_webdriver_patch.clj
前回と同様に、clj-webdriver.coreの関数を再定義して対応する。
(ns clj-webdriver-patch)
(in-ns 'clj-webdriver.core)
(import 'org.openqa.selenium.chrome.ChromeOptions)
(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 [option (ChromeOptions.)]
;; for Linux
;; (.setBinary option "chrome.binary" "/usr/bin/google-chrome")
(if chrome-switches
(.addArguments option (into-array chrome-switches)))
(init-driver (ChromeDriver. option))))
src/chrometest/core.clj
サンプルコード。
User-AgentにiPhoneを設定し、googleで「hogehoge」を検索する。
(ns chrometest.core
(:require [clj-webdriver.core])
(:use clj-webdriver-patch)
(:require [clj-webdriver.taxi :as taxi]))
(System/setProperty "webdriver.chrome.driver" "c:/Application/chromedriver/chromedriver-2.4.exe")
(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 user-agent-switch [user-agent]
(str "--user-agent=\"" user-agent "\""))
(defn test1 []
(taxi/set-driver! {:browser :chrome
:chrome-switches [(user-agent-switch *ua-iPhone-3G*)]})
(taxi/to "https://www.google.com/")
(taxi/input-text "input[name='q']" "hogehoge")
(taxi/click "button[name='btnG']"))
Debian Wheezyでの実行
chromedriverの最新版はglibc2.1.15に依存しており、glibcのバージョンを上げなければならない。
How to upgrade glibc from version 2.13 to 2.15 on Debian? にglibcのバージョンを上げる方法が書かれていたが、試していない。