macOS Ruby で Selenium WebDriver の利用準備、覚書
Selenium IDE で特定の操作をしながらスクリーンショットを撮ることがしたいなと思ったのですが、chrome のアドオンではうまく行かず、、captureEntirePageScreenshot コマンドがどうしてもエラーになる。
色々と調べた結果バージョンアップで使えなくなったとかなんとか。使えるのかどうかまったくわからなかったので、普通に Selenium WebDriver を使うことにしました。
WebDriver のインストールでパーミッションエラー
$ gem install selenium-webdriver
としたところ、
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
いきなりパーミッションエラーで怒られました。1手目でいきなりひどい。
まずは Ruby の環境構築
新しい MacBook だったのでデフォルトの状態です。まずは Ruby の環境構築からやった方がいいと思いまして色々と必要なものをインストールしました。
1.Homebrew のインストール
$ which brew
として、Homebrew がインストールされていないことを確認。最新の Homebrew をインストールします。
昔記事(ffmpeg を Homebrew からインストール。)で書いていたけどすっかり忘れてた、ダウンロード先の URL が最新かどうか公式でチェックした方が良い。
参考:The missing package manager for macOS — The missing package manager for macOS
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
とすると、モリモリインストールなりが始まりますが、途中 Command Line Tools のダウンロード〜インストールなども挟むので5分くらいは掛かったかも?
2.rbenv および ruby-build をインストール
$ brew install rbenv ruby-build
3.rbenv の設定
rbenv の初期化スクリプトを .bash_profile へ追加するその前に、.bash_profile と呼ばれる設定ファイルがホームディレクトリに存在していないことがわかったので作成します。
$ touch .bash_profile
.bash_profile に下記おまじないを書き込んで・・
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source コマンドで現在の bash に設定ファイルを反映させたあと、バージョンを確認。
$ source ~/.bash_profile
$ rbenv --version
rbenv 1.1.1
4.最新の Ruby インストール
現在利用している Ruby のバージョンを一応確認しておきます。
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17]
インストールできるversionの一覧を表示させてその中から最新の安定版を選択
$ rbenv install -l
インストール
$ rbenv install 2.5.1
このままだと 2.3.7 のままなので、rbenv rehash コマンドで Ruby 2.5.1 を利用できる状態にし、デフォルトでどのバージョンの Ruby を用いるかを rbenv global [version] で設定する。
$ rbenv rehash
$ rbenv global 2.5.1
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
何故かうまくバージョンが切り替わらなかった、が、下記を試すことで切り替わるようになりました。
rbenv local –unset
ディレクトリ固有のRubyバージョンを指定しているわけではないものの、一応ローカルのバージョン設定を破棄してみる。$ rbenv local –unset
$ rbenv rehash
当たり前ですが変化なし。
「当たり前だけど変化しない」と言われましたが、何故かうまくいきました。
※ ruby 2.7.0
Selenium-WebDriver のインストール
さて、ここまで来たら冒頭で失敗した selenium-webdriver のインストールを試してみると、無事にインストールできました。
$ gem install selenium-webdriver
$ gem list
(中略)
selenium-webdriver (3.14.0)
(中略)
冒頭で失敗した際に、sudo すればインストール出来たかもしれないですが、なんだかそれだと無理矢理感がありイマイチな気がしますので、この方法で良しとします。
ブラウザ geckodriver の用意
次に、ブラウザの役割をするものとして geckodriver を用意します。
参考:Releases · mozilla/geckodriver
こちらから macOS 用のものをダウンロードし解凍したものをパスが通っている場所に設置する必要がある、と。現在のパスはどうなっているかを確認します。
$ echo $PATH
/Users/{username}/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
rbenv を入れたから?.rbenv/shims が優先となっている様子。ま、、これの何処に geckodriver を置いたら良いのかはいまいちピンと来ていませんが、/usr/local/bin 辺りが良さそう。
参考:PATHを通すとは? (Mac OS X) – Qiita
$ mv /Users/{username}/Downloads/geckodriver /usr/local/bin
Ruby で適当にスクリプトを書いてみる
公式ドキュメントにある下記を叩いてみてエラーが出ずに動けば環境構築完了です。
require 'rubygems' require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox driver.get "http://google.com" element = driver.find_element :name => "q" element.send_keys "Cheese!" element.submit puts "Page title is #{driver.title}" wait = Selenium::WebDriver::Wait.new(:timeout => 10) wait.until { driver.title.downcase.start_with? "cheese!" } puts "Page title is #{driver.title}" driver.quit
あとは専用のコマンドを覚えながら、スクリプトを作成して行くカタチになります。お疲れ様でした。
※ macOS High Sierra 10.13.6
※ ruby 2.5.1
※ selenium-webdriver (3.14.0)