24
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Herokuを使ってchromeでwebページのスクリーンショットをとる

Last updated at Posted at 2017-09-08

作成したwebサービスにスクリーンショットを追加したいと思ったことはありませんか?

Heroku に Headless Chromeを入れると Heroku内でChromeを操作できるので、簡単にスクショを取ることができます。
rubyからchromeを呼び出しでスクショをとってみます。

Herokuをsetupする

Herokuでアプリを作成しましょう(作成手順は他を参考にしてください)。
作成時にはchromeが入っていないので、Buildpacksに追加します。HerokuコンソールのSettingにBuildpacksの設定があるので、2つ追加します。

https://github.com/heroku/heroku-buildpack-chromedriver.git
https://github.com/heroku/heroku-buildpack-google-chrome.git

スクリーンショット 2017-09-09 5.41.44.png

追加後にデプロイをすると、デプロイ時に関連するパッケージがインストールされます。

Rubyからchromeを呼び出してスクリーンショットをとる

ruby からはcapybaraとseleniumを使ってchromeを呼び出します。
Gemfileに追加してbundle installします。

gem 'capybara'
gem "selenium-webdriver"

コードの流れは、chromeの設定をしてsessionを作成、sessionでurlを指定してwebページを訪れ、そこでスクショをとります。
session.visit後に少し待たないとchromeが画面をrenderする前のスクショがとれる場合があるのでまっています。

    require 'capybara'
    require 'selenium-webdriver'
    
    base_args = %w{headless no-sandbox disable-gpu}

    chrome_bin =  "/app/.apt/usr/bin/google-chrome"
    chrome_opts = chrome_bin ? { "chromeOptions" => { "binary" => chrome_bin, 'args' => base_args } } : {}

    Capybara.register_driver :chrome do |app|
      Capybara::Selenium::Driver.new(
        app,
        browser: :chrome,
        desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
      )
    end

    Capybara.default_driver = :chrome

    @session = Capybara::Session.new(:chrome)

    @session.visit(url)
    sleep 5 # waiting for getting assets                                                                                                                                                                

    @session.driver.browser.manage.window.move_to(0, 0)
    @session.driver.browser.manage.window.resize_to(800, 1200)
    sleep 1

    @session.save_screenshot(cache_file)
    @session.driver.quit

日本語 font

Herokuの環境では標準では日本語フォントが表示されないため、文字が化けます。フォントを用意する必要があります。herokuはfontconfigに対応しているため、ソースの直下に.fontsを作成して、そこにttsのフォントをおくとそのフォントが使われます。 http://okoneya.jp/font/ で配布しているフォントを使いました。

ソース

sinatraに組み込んだソース一式をこちらに置いておきます。

Herokuで確認

完成したものをこちらにデプロイしています。qiita上のページに限定してスクショをとるようにしています。urlを変更すれば、他のページのスクショも取れます。

thumbnail.png

24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?