

MacOS-X、SeleniumをRubyで書いてChromeを動かそうとしているのですが、うまくいきません。RubyとSeleniumのインストールまではうまくいったのですが、ChromeDriverのインストールでハマっています。  
具体的には、irbで

[code]

    require "selenium-webdriver"
    driver = Selenium::WebDriver.for :Chrome
    
[/code]

とやっても

[code]

    Selenium::WebDriver::Error::WebDriverError: Unable to find the chromedriver executable. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. More info at http://code.google.com/p/selenium/wiki/ChromeDriver.
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/service.rb:20:in `executable_path'
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/service.rb:33:in `default_service'
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/bridge.rb:14:in `initialize'
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/common/driver.rb:37:in `new'
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/common/driver.rb:37:in `for'
        from /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver.rb:67:in `for'
        from (irb):3
        from /usr/bin/irb:12:in `<main>'
    
[/code]

と怒られてしまいます。

ネットでもいろいろ調べてみたのですがうまくいきません。  
Chromedriverは

[code]

    /Library/Ruby/Gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/
    
[/code]

に置いてあり、.bashrcにこのディレクトリへのパスも記述してあります。

あと何がいけないのでしょうか。


CC BY-SA 3.0
2015-05-04T01:51:05.823
9805
2015-08-14T06:01:34.490
2015-05-04T19:55:33.450
85
9590
question
ruby macos google-chrome selenium
Selenium::WebDriver::Error::WebDriverError: Unable to find the chromedriver executable. というエラーが発生します


Selenium + Chromeで動かしたことはないのですが、同様の問題が発生するかどうかを確認してみました。  
結果としては僕の環境では正常に動きました。

動作確認用のプログラムを作ってみたので、これを実行した結果を教えてください。

<https://github.com/JunichiIto/selenium-chrome-sandbox>

## 実行方法

[code]

    git clone git@github.com:JunichiIto/selenium-chrome-sandbox.git
    cd selenium-chrome-sandbox
    bundle install
    # 動作確認プログラム内のchromedriverをロードする場合
    PATH=$PATH:./bin bundle exec ruby ./chrome.rb
    # システムのPATHに存在するchromedriverをロードする場合
    bundle exec ruby ./chrome.rb
    
[/code]

## 正常に読み込めた場合の実行結果

[code]

    start
    Checking /usr/local/sbin/chromedriver, Exists?=false, executable?=false
    Checking /usr/local/bin/chromedriver, Exists?=false, executable?=false
    .
    .
    .
    Checking ./bin/chromedriver, Exists?=true, executable?=true
    FOUND ./bin/chromedriver
    done
    
[/code]

## 読み込めなかった場合の実行結果

[code]

    start
    Checking /usr/local/sbin/chromedriver, Exists?=false, executable?=false
    Checking /usr/local/bin/chromedriver, Exists?=false, executable?=false
    .
    .
    .
    Checking /sbin/chromedriver, Exists?=false, executable?=false
    NOT FOUND!!
    /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/service.rb:20:in `executable_path': Unable to find the chromedriver executable. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. More info at http://code.google.com/p/selenium/wiki/ChromeDriver. (Selenium::WebDriver::Error::WebDriverError)
            from /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/service.rb:33:in `default_service'
            from /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/chrome/bridge.rb:14:in `initialize'
            from /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/common/driver.rb:37:in `new'
            from /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/common/driver.rb:37:in `for'
            from /Users/jit/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver.rb:67:in `for'
            from ./chrome.rb:27:in `<main>'
    
[/code]

## 参考

`find_binary`メソッドはselenium-webdriverで使われているロジックをそのまま移植したものです。  
`find_binary`メソッドではPATHで取得した全ディレクトリに対して chromedriver
という名前の実行可能ファイルがないかチェックし、見つかった時点でそのパスを返す、見つからなければ`nil`を返す、というロジックになっています。

[code]

    # See https://code.google.com/p/selenium/source/browse/rb/lib/selenium/webdriver/common/platform.rb#138
    def find_binary(*binary_names)
      paths = ENV['PATH'].split(File::PATH_SEPARATOR)
    
      binary_names.each do |binary_name|
        paths.each do |path|
          exe = File.join(path, binary_name)
          puts "Checking #{exe}, Exists?=#{File.exist?(exe)}, executable?=#{File.executable?(exe)}"
          return exe if File.executable?(exe)
        end
      end
    
      nil
    end
    
    # See https://code.google.com/p/selenium/source/browse/rb/lib/selenium/webdriver/chrome/service.rb#19
    path = find_binary "chromedriver"
    
[/code]


CC BY-SA 3.0
2015-05-04T20:07:00.440
9826
2015-05-04T20:07:00.440
85
9805
answer


ターミナルで chromedriver にパスが通っているか確認してみてください。  
以下は私のmacの環境です。chromedriver を /usr/local/bin にインストールしています。

[code]

    $ which chromedriver
    /usr/local/bin/chromedriver
    
    $ chromedriver --help
    Usage: chromedriver [OPTIONS]
    
    Options
      --port=PORT                     port to listen on
      --adb-port=PORT                 adb server port
      --log-path=FILE                 write server log to file instead of stderr, increases log level to INFO
      --verbose                       log verbosely
      --silent                        log nothing
      --url-base                      base URL path prefix for commands, e.g. wd/url
      --port-server                   address of server to contact for reserving a port
    
[/code]

パスが通っている所にインストールされていないようでしたら、エラーメッセージにある以下のURLからダウンロードして、インストールしてください。

[code]

    http://chromedriver.storage.googleapis.com/index.html
    
[/code]

それと、アプリケーションフォルダにChromeがインストール済である必要があります。

[code]

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
    
[/code]


CC BY-SA 3.0
2015-05-16T03:06:52.550
10248
2015-05-16T03:06:52.550
9529
9805
answer