マイペースなRailsおじさん

Ruby、Ruby on Rails、オブジェクト指向設計を主なテーマとして扱います。だんだん大きくなっていくRuby on Rails製プロダクトのメンテナンス性を損なわない方法を考えたり考えなかったりしている人のブログです。

RubyでWebスクレイピングしたい(ChromeDriverインストール編)

Seleniumを使って、Google画像検索から画像をスクレイピングすることにしました。

環境

  • Ubuntu 18.04.2 LTS
  • WSL2 on Windouws 10
  • ruby 2.7.2

selenium-webdriverをインストール

まずはruby経由でWebDriverへのリクエストを送信するためのgem、selenium-webdriverをインストールします。

selenium-webdriver | RubyGems.org | your community gem host

gem install selenium-webdriver

selenium-webdriverの主な役割は、WebDriverと通信するためのAPIを提供することです。WebDriverが含まれているわけではないので、操作したいブラウザとそのブラウザ用のWebDriverを別途インストールする必要があります。

Chromeをインストール

操作したいブラウザの本体をインストールします。今回はChromeにします。すでにChromeをインストール済みの場合はスキップしてください。

WSL2では、GUIを操作するためにWindows用のX ServerであるをVcXsrv利用します。インストール時に少し工夫が必要なため、下記のサイトを参考にしました。Ubuntuのバージョンは違いましたが、特に手順は変えずにインストールできました。

  1. WSL2+Ubuntu 20.04でGUIアプリを動かす | AsTechLog
  2. WSL2+Ubuntu 20.04にChromeをインストール | AsTechLog

この操作でWSL2からGUIが使えるようになるので、ついでにgnome-openできるようにしたい方はこちらを参考にしてみてください

WSL2の導入とGUI環境の構築とsshfsしたものもgnome-openしたい!! [Ubuntu18.04/20.04] - Qiita

chromedriverをインストール

WebDriverは各ブラウザごとに実装されています。Chrome用のWebDriverであるchromedriverを使います。

Googleが配布しているchromedriverをダウンロードして、PATHの通っている場所にchromedriverのバイナリを配置すれば完了です。

1. Chromeのバージョンを確認

$ google-chrome --version
Google Chrome 86.0.4240.183

2. chromedriverをインストール

unzip が必要なので、インストールされていなければインストールします。

sudo apt-get install unzip

公式サイトより、先程確認したChromeのバージョンとなるべく近いバージョンのものをダウンロードし、パスの通っているフォルダにはいちします。実行権限を付与するのも忘れずに。

wget https://chromedriver.storage.googleapis.com/86.0.4240.22/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo cp chromedriver /usr/bin
sudo chmod +x /usr/bin/chromedriver

3. 動作確認

irbを起動し、chromeを立ち上げます。

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome

f:id:ytnk531:20201116055649p:plain

無事起動したら、irbからブラウザを操作できることを確かめます。

driver.get 'https://google.com'

googleにアクセスできていれば成功です。 f:id:ytnk531:20201116055944p:plain

起動時にCapabilitiesというオブジェクトを渡すと、オプションを設定できます。ウィンドウを立ち上げないヘッドレス状態で起動するには下記のように指定します。

    caps = Selenium::WebDriver::Remote::Capabilities.chrome(
      'chromeOptions' => { args: %w[--headless --disable-gpu] }
    )
    Selenium::WebDriver.for :chrome, desired_capabilities: caps

ブラウザの状態を確認しつつプログラムを書いたりデバッグをする際はGUI付きで、自動実行する場合はヘッドレス状態で起動するのがよいでしょう。

続く

WSL2にChromeをインストールするところはVcXSrvの起動オプションなどに工夫が必要なので、ハマりポイントかもしれません。 次はようやく画像をダウンロードしていきます。