Capybara+SeleniumでHeadless Chromeを動かす
なんとか続いてるローテーションブログ、火曜担当のなんです 今回はchrome59から導入されたヘッドレスモードをCapybara+Seleniumで動かしてみました。言語にはRubyを使用します
やりたいこと
- 指定URLのスクリーンショットを撮る
今回は試しに使ってみるだけなので、スクショを撮るところまで行います。次あたりで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晒しておくのでお気軽に
かなり手軽に遊べるので、次は実際にどこかのサイトをスクレイピングしてみようと思います