Ruby、seleniumでスクリーンショットを撮ろうとして困った話


困ったこと

以下のようなコードを書いてヘッダレスでWEBサイトを撮ろうと思ったら、エラーが出てうまく動かなかった。

require "selenium-webdriver"

...

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.window.resize_to(width, height)
driver.get(url)
driver.save_screenshot(image_path)
driver.quit

出るエラーは、

unable to connect to chromedriver 127.0.0.1:9515

なにやらchromedriverとの連携がうまくいっていないらしい。chromedriverはhomebrewで入れたものをそのまま使っている。コマンドラインからそのまま叩いたらchromedriver自体は起動している(ように見える)ので、rubyとの連携がうまくいっていないのだろう、と思った。

ちょっと調べてみると、chromedriver-helperというgemを入れたら動くようになったという情報を見つけたのでgemfileに加えてbundle installすると・・・

  +--------------------------------------------------------------------+
  |                                                                    |
  |  NOTICE: chromedriver-helper is deprecated after 2019-03-31.       |
  |                                                                    |
  |  Please update to use the 'webdrivers' gem instead.                |
  |  See https://github.com/flavorjones/chromedriver-helper/issues/83  |
  |                                                                    |
  +--------------------------------------------------------------------+

なにやら最近非推奨のgemになったらしい。代わりにwebdriversというのを入れろと言われたので入れてみた。→うまくいった!

感想

色々なブラウザをサポートしているのかな、という感じ。(単にchromedriver-helperの更新が終わるから変わっただけかもしれない)
何はともあれ、動いてよかった