Seleniumを使って、Google画像検索から画像をスクレイピングすることにしました。
環境
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をインストール済みの場合はスキップしてください。
WSL2では、GUIを操作するためにWindows用のX ServerであるをVcXsrv利用します。インストール時に少し工夫が必要なため、下記のサイトを参考にしました。Ubuntuのバージョンは違いましたが、特に手順は変えずにインストールできました。
- WSL2+Ubuntu 20.04でGUIアプリを動かす | AsTechLog
- 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
のバイナリを配置すれば完了です。
$ 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

無事起動したら、irbからブラウザを操作できることを確かめます。
driver.get 'https://google.com'
googleにアクセスできていれば成功です。

起動時にCapabilitiesというオブジェクトを渡すと、オプションを設定できます。ウィンドウを立ち上げないヘッドレス状態で起動するには下記のように指定します。
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
'chromeOptions' => { args: %w[--headless --disable-gpu] }
)
Selenium::WebDriver.for :chrome, desired_capabilities: caps
ブラウザの状態を確認しつつプログラムを書いたりデバッグをする際はGUI付きで、自動実行する場合はヘッドレス状態で起動するのがよいでしょう。
続く
WSL2にChromeをインストールするところはVcXSrvの起動オプションなどに工夫が必要なので、ハマりポイントかもしれません。
次はようやく画像をダウンロードしていきます。