Firefoxのヘッドレスブラウザ+Seleniumでログイン後ページのスクリーンショットを撮る
目的
サービスの計測値を日時で確認必要があり、それを自動化したかった
APIが提供されていないので直接見るしかなく、
ログインが必要なためnokogiriによるスクレイピングでは難しかった
そのためSeleniumを使ってログインし、スクリーンショットを定期的に撮るようにした
コード
screen_shot.rb
require 'selenium-webdriver' require 'time' url = "...ログインが必要なサービスのログインページ" #適宜変更 options = Selenium::WebDriver::Firefox::Options.new options.add_argument('-headless') driver = Selenium::WebDriver.for :firefox, options: options driver.navigate.to url sleep 3 #seleniumはブラウザ表示が間に合わなくてエラーになるため3秒待つ email = driver.find_element(id: 'email')#DevToolでID入力欄を指定できるID/Classを探す email.send_keys "ID"#IDを入力 password = driver.find_element(id: 'password')#DevToolでパスワードを指定できるID/Classを探す password.send_keys "パスワード"#パスワードを入力 submit = driver.find_element(class: "sign-in")#DevToolでログインボタンを指定できるID/Classを探す submit.submit sleep 7 #遷移時の処理が遅い場合があるため待つ date = Time.now.strftime("%Y%m%d_%H%M%S") driver.save_screenshot('log_' + date + '.png') driver.quit
Gemfile
source 'https://rubygems.org' gem 'selenium-webdriver'
コンソールコマンド
bundle install bundle exec ruby screen_shot.rb
実行したディレクトリ内にlog_{現在時刻}.png というファイルが表示されます。 例えばGmailみたいに、「未ログイン時に遷移した時に、ログインページに飛び、ログイン後にもともと遷移したかったページが表示される」サービスの場合は表示したいページを直接指定すればそのスクリーンショットが取れる