ちゃなんログ

書き散らします。マラソンがしたいです。

Capybara+SeleniumでHeadless Chromeを動かす

なんとか続いてるローテーションブログ、火曜担当のなんです 今回はchrome59から導入されたヘッドレスモードをCapybara+Seleniumで動かしてみました。言語にはRubyを使用します

やりたいこと

今回は試しに使ってみるだけなので、スクショを撮るところまで行います。次あたりでCapybara+Seleniumらしくスクレイピングっぽいことをしようと思います

ちなみに単純にchromeをコマンドからヘッドレスモードで起動することもできます

chrome --headless --disable-gpu --dump-dom http://abehiroshi.la.coocan.jp/

自分の場合は以下のようなエイリアスを作成しているのでchromeの部分は適宜変更してください

alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"

サンプルコード

Gemfile

以下のgemを使用しました

gem 'sinatra'
gem 'activesupport'
gem 'sinatra-contrib'
gem 'capybara'
gem 'selenium-webdriver'
gem 'chromedriver-helper'
gem 'pry-byebug'
gem 'launchy'

sinatra関連のgemは後々画面にスクレイピング結果を表示する際に使用するので、今回はなくても大丈夫です

スクリーンショット取得処理

require 'sinatra'
require 'sinatra/reloader'
require 'pry'

require 'selenium-webdriver'
require 'capybara'

get '/' do
  Capybara.configure do |capybara_config|
    capybara_config.default_driver = :selenium
    capybara_config.default_max_wait_time = 10
  end

  Capybara.register_driver :selenium do |app|
    Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(
        chrome_options: {
          args: %w(headless disable-gpu window-size=1680,1050),
        },
      )
    )
  end
  Capybara.javascript_driver = :chrome

  url = 'http://abehiroshi.la.coocan.jp/'
  session = Capybara::Session.new(:selenium)
  session.visit(url)
  session.save_and_open_screenshot('screenshot.jpg')
end

これで指定URLのスクショをscreenshot.jpgというファイル名で作成することができました。雑ですがgithub晒しておくのでお気軽に

github.com

かなり手軽に遊べるので、次は実際にどこかのサイトをスクレイピングしてみようと思います