読者です 読者をやめる 読者になる 読者になる

SeleniumのChromeDriverでUser-Agentを変更する

Selenium Python

WebKit、しかもiOSのWebKitでしか動かないコードを通して世界を良くしていますかっ!?(挨拶)

前回似たようなエントリを書いた時には分からなかったのだが、SeleniumのChromeDriverでUser-Agentを変更するのは比較的容易だった。これでFirefoxではピクリとも動かないサイトでもテストできる!!Opera、IE、なにそれ?

ChromeDriverでUser-Agentを変更するには、SeleniumのChromeDriverのWikiページにあるように、DesiredCapabilitiesオブジェクトに--user-agentオプションを渡してChromeを起動するようにしてやればよい。

Java, C#, Rubyといった各言語ともインターフェイスはほぼ同じなのではないかと想像するが、Pythonの場合はChrome WebDriverのdesired_capabilities引数はdeprecated扱いのようなので、Optionsオブジェクトを使うのが正解のようだ。

次のような感じ。

import sys
from selenium.webdriver.chrome import webdriver, options

executable_path = sys.argv[1]

options = options.Options()
options.add_argument('--user-agent="Mozilla/5.0 (Linux; U; Android 2.3.3; ja-jp; SC-02C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')

driver = webdriver.WebDriver(executable_path)
driver.get("http://tknight.gree.jp/?&render=1")

他に便利そうなオプションとしては、

options.add_argument('--proxy-server=http://127.0.0.1:8888')

のように、HTTPプロキシを指定する--proxy-serverオプションなど。


困っているのは、Ubuntu 12.04の特に何もExtensionを入れていないChrome 18.0.1025では上記のコードが期待通り動くのを確認したのだが、OSX LionのChrome 19.0.1084.46では、テスト対象サイトにはリクエストは飛ぶものの描画の段階で?クラッシュしてしまうということ。

これがOSX Lionだからなのか、Chromeの問題なのか、Extension等の個人環境の問題なのか、ChromeDriverの問題なのかが現時点でさっぱり分からないので、もう少し調査しないといけない・・・