poltergeistの設定
Capybara.configure do |config|
config.run_server = false
config.current_driver = :poltergeist
config.javascript_driver = :poltergeist
config.default_max_wait_time = 10
end
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {
timeout: 10,
js_errors: false,
phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=any'],
})
end
Capybara::Sessionのラッパークラスを作る
class BaseBrowser
attr_reader :session
def initialize(url, options = {})
@session = Capybara::Session.new(:poltergeist)
@session.visit(url)
end
end
デフォルト言語設定を日本語にする
session.driver.headers = {
'Accept-Language' => 'ja'
}
ja と ja-JPだとjaのが良さそう
http://memorva.jp/internet/pc/browser_language.php
iphoneやMacでアクセスする
Mac
session.driver.headers = {
"User-Agent" => "Mac Safari"
}
iphone
session.driver.headers = {
"User-Agent" => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A334 Safari/7534.48.3'
}
非表示のテキストを取得する
session.find('css_class', visible: false).text(:all)
session.all('css_class', visible: false).map { |tag| tag.text(:all) }
visible: false
textにallを渡す
ajaxの待機メソッド(Capybara.default_max_wait_time = 10であれば内部で10秒待ってくれる)
def wait_for_ajax(loading_element)
session.has_css?(loading_element)
end
poltergeistをkill
def finish
session.driver.quit
@session = nil
end
これをしないとバッチのループなどでsessionを立ち上げ続けてるとpoltergeistが死なずにメモリが膨れる。なので実行終了時や例外時で抜ける時などに必ずfinishを呼び出す。