MacのOSをCatalinaへ変更したらSeleniumがいなくなった時の話【Chrome Driver】

Python Linux
※横にスクロールします。

不具合。anacondaとseleniumは一体どこに?


このお話は、Catalinaのこともanacondaのことも、ましてやseleniumのことさえも。
いまいち分かっていない人が書いたお話なので、あくまで参考までにお読みください。


ある日、私は久しぶりにpython3のseleniumを使おうとした。。

$ python3 api.py
Traceback (most recent call last):
  File "api.py", line 3, in 
    from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'

seleniumはいなくなっていた。。

私のseleniumは、anaconda3の中のpython3.6の中に配置されていたのだが。
最近、Mac OSをCatalinaへアップグレードした時に、anaconda3を丸ごと勝手に移動させられていたようだ。
デスクトップの”場所が変更された項目/セキュリティ/”の下に”anaconda3″はいるように見えるが、、
これは、エイリアス。
実体は、”/Users/Shared/Relocated\ Items/Security/”の下に潜んでいるようだ。。

Catalina 以前は、anaconda3は/(ルート)にいたのだが、Catalinaはanaconda3を/(ルート)に置いておく事を、よく思っていないらしい。
そこで、anaconda3はhomeディレクトリへ移動させることにした。

現在、anaconda3(実体)のいるディレクトリへ移動

$ cd /Users/Shared/Relocated\ Items/Security/

anaconda3を確認

$ ls -l
anaconda3

anaconda3をhomeディレクトリへコピー

$ cp -p -r ./anaconda3 /Users/{ユーザー名}/

多少時間がかかる‥

$ cd /Users/{ユーザ名}/anaconda3/bin/
$ vi conda

1行目を修正
#!/anaconda3/bin/python

#!/Users/{ユーザ名}/anaconda3/bin/python
:wq

condaをアップデート

conda update conda
conda init bash
#もしくは、conda init zsh
#~/.bash_profileへパスを通す記述が追記される

#設定を再読み込み

source ~/.bash_profile

これで再び、seleniumを使えるようになりました。




続、不具合。anacondaの配置場所を変えたら、curlコマンドが使えない‥

anacondaの配置を変えたが、curlコマンド実行時に証明書へのパスがそのままなので、接続できなくなっていた。

~$ curl https://www.google.com
curl: (77) error setting certificate verify locations:
  CAfile: /anaconda3/ssl/*****.pem
  CApath: none

anacondaは、~(ユーザーのホームディレクトリ)に移動したのだから、

CAfile:/Users/{ユーザ名}/anaconda3/ssl/*****.pem

となっていなければ、だめだ。

~$ curl -k https://www.google.com

-k オプションを使ってみると正常に実行される。
※-kは証明書を使わずに通信をおこなう。非推奨らしい。

~$ which curl
/Users/{ユーザ名}/anaconda3/bin/curl

やはり、私のcurlは、anacondaのcurlを使用している。

~$ls -l /Users/{ユーザ名}/anaconda3/bin/curl | grep curl
-rwxrwxr-x  1 {ユーザ名}  staff    216068 10 29 00:39 curl
-rwxrwxr-x  1 {ユーザ名}  staff      6716 10 29 00:39 curl-config

勝手に配置場所を変えてしまったし、、
curl-configというファイルに証明書へのパスらしきものの記述があったが修正してもダメだった。
書き方がいけないのか?
ビルドし直したりする必要があるのか?
そもそも、私はビルドとか言ってるけど、ビルドってなんだ?

~$ which curl
/Users/mj/anaconda3/bin/curl

いろいろ苦戦した挙句、anacondaをアップデートしてあげた。

~$ conda update conda

そしたら、curl-configの内容も自動で書きかわり無事に証明書へのパスが通り、curlコマンドが使えるようになりました。

付録

ChromeDriver アップデートコマンド

〜$ brew cask info chromedriver
chromedriver: 78.0.3904.70
https ://sites.google.com/a/chromium.org/chromedriver/home
/usr/local/Caskroom/chromedriver/76.0.3809.68 (14.6MB)
From: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/chromedriver.rb
==> Name
ChromeDriver
==> Artifacts
chromedriver (Binary)

〜$ pip install --upgrade pip
Requirement already up-to-date: pip in 
(省略)

〜$ pip install selenium -U
Requirement already up-to-date: selenium in 
(省略)

〜$ brew tap homebrew/cask
Updating Homebrew...
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics

(省略)

cockroach           grib-api            php@7.1             wine

〜$ brew reinstall chromedriver --cask
==> Downloading https://chromedriver.storage.googleapis.com/78.0.3904.105/chrome
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'chromedriver'.
==> Uninstalling Cask chromedriver
==> Unlinking Binary '/usr/local/bin/chromedriver'.
==> Purging files for version 76.0.3809.68 of Cask chromedriver
==> Installing Cask chromedriver
==> Linking Binary 'chromedriver' to '/usr/local/bin/chromedriver'.
🍺  chromedriver was successfully installed!




ChromeDriverのバージョン指定

現在、インストールされているChromeDriverのバージョンを確認する

〜$ chromedriver --version
〜$ pip list | grep chrome

ChromeDriverのバージョンを指定してインストールする
(例)87.0.4280.88を指定してインストール

〜$ pip install chromedriver-binary==87.0.4280.88

コメント