[Ruby]ハマりを最小限に抑えるseleniumの導入方法


はじめに

seleniumは、Webアプリケーションのテストを自動化するためのツールであり、プログラムからWebブラウザの自動操作を行うことが出来ます。
自分が導入した際につまづいた点を振り返りながら、初心者なりに考え、仮にエラーが出たとしても調査しやすいような手順にまとめましたので、これから導入される方のお役に立てればと思います。(フォルダ構成が変わるだけで、WinもMacも作業は同じです)

selenium導入手順 目次

0_webスクレイピングで気をつけること
1_確認作業用フォルダの作成
2_chromedriverのダウンロード
3_seleniumのインストール
4_中間動作確認
5_chromedriverの移動
6_最終動作確認

0_webスクレイピングで気をつけること

seleniumを使ってWebアプリケーションの自動テストの他に、webスクレイピングも出来ます。スクレイピングの際、やって良いこと/悪いことがありますので、これから始めるという方は下記の記事を読まれることをおすすめします。

- Webスクレイピングの注意事項一覧
- WEBスクレイピングの技術と懸念事項

1_確認作業用フォルダの作成

確認作業のためにデスクトップにフォルダを作り、中にhtmlファイルとRubyファイルを作成します。
コンソールで下記を実行
mkdir /Users/ユーザーネーム/Desktop/sele_work
cd /Users/ユーザーネーム/Desktop/sele_work
touch sample.html
touch selenium_test.rb

ファイルを編集

sample.html
<!DOCTYPE html>
<html>
    <head>
        <title>テスト用</title>
    </head>
    <body>
        <h1>ハンバーガーショップ</h1>
        <div>
            メニュー:
            <select name="menu">
            <option value="">メニューを選択してください</option>
            <option value="normal">ハンバーガー</option>
            <option value="cheese">チーズバーガー</option>
            <option value="double">ダブルバーガー</option>
            </select>
            <br>
            サブメニュー:
            <input type=checkbox name="submenu" value="drink">飲み物
            <input type=checkbox name="submenu" value="potato">ポテト
            <input type=checkbox name="submenu" value="nugget">ナゲット
            <br>
            お持ち帰り:
            <input type=radio name="takeout" value="yes">yes
            <input type=radio name="takeout" value="no">no
            <br>
            メモ:
            <input type=text name="memo">
        </div>
        <input type=submit value="OK">
        <input type=reset value="キャンセル">
    </body>
</html>
selenium_test.rb
require "selenium-webdriver"

url = "file:///Users/ユーザーネーム/Desktop/sele_work/sample.html"

# chromeドライバは作業フォルダに仮置中なので作業フォルダを指定する
chromedriver_path = "/Users/ユーザーネーム/Desktop/sele_work/chromedriver"
Selenium::WebDriver::Chrome::Service.driver_path = chromedriver_path
driver = Selenium::WebDriver.for :chrome

# urlへアクセス
driver.get(url)

p driver.page_source

driver.quit

2_chromedriverのダウンロード

Google Chromeのバージョンを確認してから、自分のchromeのバージョンに合ったドライバをこちらからダウンロードし、解凍したchromedriver/Users/ユーザーネーム/Desktop/sele_workに置きます。

【Google Chromeのバージョンチェック】

3_seleniumのインストール

コンソールで下記を実行
gem install selenium-webdriver

4_中間動作確認

ここで一旦、ruby selenium_test.rbを実行し、sample.htmlのsourceが取得できていることを確認します。セキュリティーのエラーが出たら、左上のりんごマーク > システム環境設定 > セキュリティーとプライバシーに進み許可を選択します。

セキュリティーブロックを解除してもエラーが発生する場合は、以下が考えられます。
- Google Chromeとchromedriverのバージョンが合っていない
- 誤字やファイル指定のミスが有る

【セキュリティーエラーの対処】

【ソース取得成功】

5_chromedriverの移動

chromedriverの動作確認が出来たので、本来置くべき場所の/usr/local/binへ移動します。
コンソールで下記を実行し、ちゃんと移動できたかも確認。
sudo mv chromedriver /usr/local/bin/
which chromedriver
PATHが通ってるか確認
echo $PATH
もし通っていないならPATHを追加
export PATH=“/usr/local/bin:$PATH”

【chromedriverの移動、PATHの確認】

6_最終動作確認

最後に、selenium_test.rbを修正し、再度ruby selenium_test.rbを実行する。
中間動作確認と同じ結果が得られれば任務完了。
ここでエラーが出る場合は、PATHが通っていないことが考えられます。

selenium_test.rb
require "selenium-webdriver"

url = "file:///Users/ユーザーネーム/Desktop/sele_work/sample.html"

# chromeドライバは作業フォルダに仮置中なので作業フォルダを指定する

# コメントアウト ここから
# chromedriver_path = "/Users/ユーザーネーム/Desktop/sele_work/chromedriver"
# Selenium::WebDriver::Chrome::Service.driver_path = chromedriver_path
# ここまで コメントアウト

driver = Selenium::WebDriver.for :chrome

# urlへアクセス
driver.get(url)

p driver.page_source

driver.quit

【最終動作確認結果】

【おまけ pythonからも動作確認】