Ruby コマンドを使おうとすると別の処理が走る。bin の中身が ChromeDriver になった?
ネットで解決策を探しても全然見当たらないということは、同じような恥ずかしいミスをする人が居ないということかと思いますが
ちょっとしたミスで Ruby コマンドが機能しなくなる事態に陥りました。
Ruby コマンドが死んだ日
今まで Selenium で Firefox を操作して使っていたのですが、たまには Chrome を使ってみようということで ChromeDriver をダウンロードして適当なディレクトリ(恐らく /Users/{user}/.rbenv/shims/ruby
に放り込んだと思われる。ネットにそう書いてあったような気がする)に放り込んだのがまずかった。
$ ruby selenium.rb
Starting ChromeDriver 73.0.3683.20 (XXXXXXXX) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
$ ruby selenium.rb
(中略)
[1551685677.807][SEVERE]: bind() failed: Address already in use (48)
IPv4 port not available. Exiting...
こんな感じで、selenium を動かすためのスクリプトがいけないのかなぁなんて色々試していたのですが、何をやっても selenium で Chrome を起動できない。普段使っている Chrome のバージョンと、ChromeDriver のバージョンを合わせる必要があるなどの書き込みを見て、ChromeDriver を差し替えようと思った時に「あれ?先に置いた ChromeDriver が見当たらない」ということに気が付きまして
そもそも、スクリプト上 Firefox 指定していても、Chrome のエラーが出てるし意味不明。
$ ruby -v
ChromeDriver 73.0.3683.20 (XXXXXXXX)
「えーっ!!なにこれーw」というコミカルな状態に。なんで ruby 使おうとすると、ChromeDriver が立ち上がろうとする(しかも失敗する)のよ。
Ruby 等のアンインストールと削除
結論から言えば、解決には ディレクトリを削除して Ruby の再インストールが必要でした。
Ruby のバージョン違いを改めてインストールしてみたり、rbenv を再インストールしてみたりしたけどそれだけでは解決しませんでした。bin がおかしくなっているので、ディレクトリから削除しないと解決しませんでした。
Ruby のアンインストール
$ rbenv versions
system
2.5.1
* 2.6.1 (set by /Users/{user}/.ruby-version)
$ rbenv uninstall 2.5.1
$ rbenv uninstall 2.6.1
system は rbenv からアンインストールできないですよね?
rbenv 等のアンインストール
(は実行するの忘れました、が、多分やった方がいいのではないかと思われる。言い訳すると、解決にたどり着く前の最初の1セット目の Ruby アンインストールの際に実施したので、混乱した)
$ brew uninstall rbenv
Uninstalling /usr/local/Cellar/rbenv/1.1.1... (36 files, 62.7KB)
$ brew uninstall ruby-build
Uninstalling /usr/local/Cellar/ruby-build/20180822... (409 files, 207KB)
なんか他にも Ruby 関連のアンインストールするものあるような気がしますが、まぁ、、
ディレクトリの削除
$ rm -rf ~/.rbenv
最初の1セット目の Ruby 再インストールの際はこのディレクトリを削除しなかったのですが、それだと Ruby コマンドがおかしいママ。ディレクトリの削除も行うことでやっと ChromeDriver ではない正しいエラーメッセージ(謎)が表示されるようになりました。
$ ruby -v
-bash: /Users/{user}/.rbenv/shims/ruby: No such file or directory
$ which ruby
/usr/bin/ruby
(十分不整合が起きて言える状態っぽいですがまずは一歩前進)
Ruby その他の再インストール
$ rbenv --version
rbenv 1.1.1
$ rbenv install -l
(中略)
$ rbenv install 2.6.1
ruby-build: use openssl from homebrew
Downloading ruby-2.6.1.tar.bz2...
(中略)
$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]
$ rbenv version
2.6.1 (set by /Users/{user}/.ruby-version)
とりあえず ruby 2.6.1 はインストールできた。system というバージョンの ruby が表示されてないが。
$ ruby selenium.rb
(中略)
`require': cannot load such file -- selenium-webdriver (LoadError)
gem も削除されたから webdriver を入れ直す必要がありますね。
$ gem install selenium-webdriver
(中略)
The internal error was:
(NoMethodError) undefined method `[]' for nil:NilClass
ERROR: While executing gem ... (NoMethodError)
undefined method `[]' for nil:NilClass
なんかエラーでた・・・。いやー、一体何が起こってるのかわかりませんが
$ brew update
$ brew install openssl
この2手間で解決しまして
参考:gem install の invoke_with_build_args のエラー 対処方法 – Qiita
$ gem install selenium-webdriver
Successfully installed selenium-webdriver-3.141.0
Parsing documentation for selenium-webdriver-3.141.0
Installing ri documentation for selenium-webdriver-3.141.0
Done installing documentation for selenium-webdriver after 1 seconds
1 gem installed
無事インストールができました。
完全にもとに戻ったかどうかはわかりませんが、selenium & Firefox が動くので、おかしくなる前と同じことは実行できるようになりました。
一瞬 OS からクリーンインストールしないといけないのかとか焦りましたが、とりあえず良かったです。