PhantomJSを使ったWatirでUser-Agentを変更する

残念ながら引用だけなんですけどね。

オリジナル

require 'watir-webdriver'

capabilities = Selenium::WebDriver::Remote::Capabilities.phantomjs("phantomjs.page.settings.userAgent" => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36")
driver = Selenium::WebDriver.for :phantomjs, :desired_capabilities => capabilities
browser = ::Watir::Browser.new driver

# Quick test to make sure it's set
browser.goto 'http://www.useragentstring.com/'
browser.textarea(:id => "uas_textfeld").value
# => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36"

Configuring Watir to use a custom user agent with the PhantomJS driver. The user agent gem has been deprecated, and this functionality is not documented anywhere (obvious). · GitHub

後半の
http://www.useragentstring.com/
は、User-Agentの確認が出来るサイトです。

やってみる

User-Agentは"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53"にします。
これはChrome(はてダ作成時はバージョン34)のEmulationでDeviceをiPhone 5にすると設定されるUAです。
ではpryします。

pry(main)> require 'watir-webdriver'
=> true
pry(main)> capabilities = Selenium::WebDriver::Remote::Capabilities.phantomjs("phantomjs.page.settings.userAgent" => "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53")
=> #<Selenium::WebDriver::Remote::Capabilities:0x007ffc235937e8
 @capabilities=
  {:browser_name=>"phantomjs",
   :version=>"",
   :platform=>:any,
   :javascript_enabled=>true,
   :css_selectors_enabled=>true,
   :takes_screenshot=>true,
   :native_events=>false,
   :rotatable=>false,
   :firefox_profile=>nil,
   :proxy=>nil,
   "phantomjs.page.settings.userAgent"=>
    "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53"}>
pry(main)> driver = Selenium::WebDriver.for(:phantomjs, desired_capabilities: capabilities)
=> #<Selenium::WebDriver::Driver:0x..fd893634c9bbd5460 browser=:phantomjs>
pry(main)> browser = Watir::Browser.new(driver)
=> #<Watir::Browser:0x12d823457a844410 url="about:blank" title="">

設定できました。
では確認します。

pry(main)> browser.goto 'http://www.useragentstring.com/'
=> "http://www.useragentstring.com/"
pry(main)> browser.textarea(:id => "uas_textfeld").value
=> "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53"

設定通りです。上手く行きました。

おまけ

PhantomJSのメモいろいろ - console.lealog();
「UserAgentを偽装する」の段落でPhantomJSのUserAgent設定方法が載っている。

page.settingsに設定
// var page = require('webpage').create();
page.settings = {
  userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25'
};

PhantomJS本体での設定箇所のうち

page.settings = {userAgent: 'Agent'}

の部分が

Selenium::WebDriver::Remote::Capabilities.phantomjs(
  "phantomjs.page.settings.userAgent" => 'Agent'
)

に対応するわけですね。

2014/12/24追記

PhantomJS の設定については公式サイトに載ってました。

userAgent 以外の設定に関しても、本記事と同様に Selenium::WebDriver::Remote::Capabilities.phantomjs"phantomjs.page.settings.なんたら" キーに値を設定して

driver = Selenium::WebDriver.for(:phantomjs, :desired_capabilities => capabilities)
browser = Watir::Browser.new(driver)

とすればよいのでしょう(未確認