eijenson Con

主に作業中にはまったことの作業ログを書いていきます。

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みたいに、「未ログイン時に遷移した時に、ログインページに飛び、ログイン後にもともと遷移したかったページが表示される」サービスの場合は表示したいページを直接指定すればそのスクリーンショットが取れる