Ruby Seleniumを使ってchromeで任意のワードで検索をする

Ruby Seleniumを使ってchromeで任意のワードで検索をする

Rubyでseleniumを使用して、プログラムからchromeを立ち上げて、指定したワードで検索するための簡単なサンプルコードです。ここではselenium-webdriverを利用しています。

環境

  • OS  windows10 pro
  • Ruby 2.7

chromedriverダウンロード

まずは、chromeを利用するのに必要なドライバー「 chromedriver 」を、こちらよりダウンロードします。

※自分の場合はchromeのバージョンが79だったので79をダウンロードしてます。

この画像には alt 属性が指定されておらず、ファイル名は Selenium5-1-1024x555.png です

chromedriver_win32.zipをクリックしてダウンロードします。

この画像には alt 属性が指定されておらず、ファイル名は Selenium2-2.png です

ダウンロードが終わったら、解凍してPATHを通すためのファルダを用意します。

※今回はC:\chromedriverにchromedriver.exeを移動させてPATHを通します

この画像には alt 属性が指定されておらず、ファイル名は Selenium5-3.png です

PATHも通しておきます。画像

この画像には alt 属性が指定されておらず、ファイル名は Selenium2.png です

selenium-webdriverインストール

Start Command Prompt with Rubyを起動します

下記のコマンドを実行してインスールします。

gem install selenium-webdriver

※後述しますがffiがないとエラーとなります。
gem install ffi

Selenium使い方

下記のコードはchrome上で「mebee」というワードを検索するだけのプログラムとなります。

test.rbという名前で下記のコードを編集します。

require "selenium-webdriver"
#chrome起動
driver = Selenium::WebDriver.for :chrome
# googleにアクセス
driver.navigate.to "http://google.com"

#qというnameを持つ要素を取得する
element = driver.find_element(name: 'q')
#検索文字列を入力
element.send_keys "mebee"
#検索を実行
element.submit
#5秒待機
sleep 5
#終了
driver.quit

実行します。

ruby test.rb

下記のエラーが発生

Traceback (most recent call last):
        2: from sel.rb:2:in `<main>'
        1: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- selenium-webdriver (LoadError)
        15: from sel.rb:2:in `<main>'
        14: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:156:in `require'
        13: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:168:in `rescue in require'
        12: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:168:in `require'
        11: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium-webdriver.rb:20:in `<top (required)>'
        10: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         9: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         8: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver.rb:20:in `<top (required)>'
         7: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         6: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         5: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess.rb:209:in `<top (required)>'
         4: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         3: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         2: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess/windows.rb:4:in `<top (required)>'
         1: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- ffi (LoadError)
        14: from sel.rb:2:in `<main>'
        13: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:156:in `require'
        12: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:168:in `rescue in require'
        11: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:168:in `require'
        10: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium-webdriver.rb:20:in `<top (required)>'
         9: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         8: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         7: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver.rb:20:in `<top (required)>'
         6: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         5: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         4: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess.rb:209:in `<top (required)>'
         3: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         2: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:72:in `require'
         1: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess/windows.rb:3:in `<top (required)>'
C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess/windows.rb:6:in `rescue in <top (required)>': FFI is a required pre-requisite for Windows or posix_spawn support in the ChildProcess gem. Ensure the `ffi` gem is installed. If you believe this is an error, please file a bug at http://github.com/enkessler/childprocess/issues (ChildProcess::MissingFFIError)

エラーメッセージ通りにffiをインスールします。

gem install ffi

再度、実行するとchromeが起動して、mebeeというワードの検索結果が表示されます。

ruby test.rb