1
1

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 1 year has passed since last update.

EC2上にRails + Selenium + Chromeの実行環境を構築する

Last updated at Posted at 2023-07-23

株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。

AWS EC2上にRails + Selenium + Chromeの実行環境を構築しました。
結構な時間ハマったので、どなたかの参考になれば幸いです。

前提

  • AWS EC2 : Amazon Linux 2023 AMI 2023.1.20230719.0 x86_64 HVM kernel-6.1
    • このAMIじゃないと、この後実行する行うコマンドでGoogle Chromeがダウンロードできない可能性があるので注意してください。
  • Ruby : v3.2.0
  • Ruby on Rails : v7.0.5
  • bundler : v2.4.12
  • Node : v16.20.0

EC2上でRuby on Railsが起動する環境構築はすでに終わっているものとします。

本題に入る前に

環境構築

環境構築する上で大事なことは、Google Chromeのバージョンと、ChromeDriverのバージョンを一致させないと動かないことになります。
Google Chromeの公式では、バージョンを指定してのダウンロードができません。
そのため、Google Chromeをダウンロードしたらバージョンを確認して、ChromeDriverのダウンロードの際にはバージョン指定をする必要がある可能性もあります。

ただし、Webdrivers::Chromedriver.required_version = "114.0.5735.90"というのを指定したところ、WebDriver内でChromeDriverを自動でインストールして、利用するようになっていました。

以前まではbrew install chromedriverを実行してChromeDriverをダウンロードして実行していましたが、最新バージョンのWebDriverを利用するとその作業の必要がなくなったということです。 とても便利。

Google Chromeのダウンロード

ターミナル
#Google Chromeのインストール
curl https://intoli.com/install-google-chrome.sh | bash

# バージョンを確認する
google-chrome --version

# 以下のような表示が出てきたらインストールができていることを確認できる
Google Chrome 115.0.5790.102

以上でEC2上での環境構築は完了です。

Railsプロジェクトのソースコード

Gemfile

Gemfile
gem "webdrivers"

gem "webdrivers"gem "selenium-webdriver"、の2つがあるが、gem "webdrivers"のみで動いきました。
以下の記事によると、webdriversの中にselenium-webdriver`がインストールされるので、Gemfile内で明示的にインストールが不要とのことです。

スクレイピングソースコード

scraping.rb
class Scraping < ApplicationRecord
  def self.test
    options = Selenium::WebDriver::Chrome::Options.new
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--window-size=1280x800')

    ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'

    # ここ大事!
    Webdrivers::Chromedriver.required_version = "114.0.5735.90"

    session = Selenium::WebDriver.for(
      :chrome,
      options: options
    )

    session.manage.timeouts.implicit_wait = 10
    wait = Selenium::WebDriver::Wait.new(timeout: 180)
    session.navigate.to('https://www.google.com/')
    session.quit
  end
end

その他

Google Chromeがクラッシュしてしまうことがありました。
エラー文は以下の通りです。

エラー文
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

その際には、以下の記事を参考にして解決しました。

参考文献

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?