Mac で Python + ChromeDriver を動かすための準備

ChromeDriver は、Chrome ブラウザをプログラムで動かすためのドライバーであり、ブラウザ上でのテストや操作を自動化するために利用されるツール。さまざまな言語で利用できるが、今回は MacPython を使って実行する環境を整備したため、手順と詰まった点を記事にしておく。

環境

python は anyenv でインストールしたものを利用している。

% python --version
Python 3.11.3
% which python
/Users/gumfum/.anyenv/envs/pyenv/shims/python

% pip --version
pip 23.3.2 from /Users/gumfum/.anyenv/envs/pyenv/versions/3.11.3/lib/python3.11/site-packages/pip (python 3.11)
% which pip
/Users/gumfum/.anyenv/envs/pyenv/shims/pip

Selenium のインストール

pip でそのままインストールする。

 % pip install selenium
Collecting selenium
  Downloading selenium-4.17.2-py3-none-any.whl.metadata (6.9 kB)

( ...中略... )

Installing collected packages: selenium
Successfully installed selenium-4.17.2

ChromeDriver のインストール

chromedriver-binary-auto を pip でインストールする。

% pip install chromedriver-binary-auto 
Collecting chromedriver-binary-auto
  Downloading chromedriver-binary-auto-0.3.1.tar.gz (5.6 kB)

( ...中略... )

Installing collected packages: chromedriver-binary-auto
Successfully installed chromedriver-binary-auto-0.3.1

auto のつかないパッケージを指定した場合は chromedriver の最新版がインストールされるが、このバージョンが起動される Chrome のバージョンと一致していないとエラーの原因となってしまう。

% pip install chromedriver-binary
Collecting chromedriver-binary
  Downloading chromedriver-binary-123.0.6268.0.0.tar.gz (5.6 kB)

( ...中略... )

Installing collected packages: chromedriver-binary
Successfully installed chromedriver-binary-123.0.6268.0.0

Chrome のバージョンは「ヘルプ」>「Google Chrome について」で確認できる。

試しに、後で実行するサンプルコードを実行してみると、バージョンが異なっている旨のメッセージが表示される。

% python example.py
The chromedriver version (123.0.6268.0) detected in PATH at /Users/gumfum/.anyenv/envs/pyenv/versions/3.11.3/lib/python3.11/site-packages/chromedriver_binary/chromedriver might not be compatible with the detected chrome version (121.0.6167.85); currently, chromedriver 121.0.6167.85 is recommended for chrome 121.*, so it is advised to delete the driver in PATH and retry

これを回避するためには、先述の -auto がついたパッケージをインストールするか、chromedriver-binary のインストール時にバージョンを指定する必要がある。

% pip install chromedriver-binary==121.0.6167.85 

サンプルを実行する

chromedriver-binary のページに記載のある Example のコードをそのまま実行してみる。 pypi.org

Example 内に Adds chromedriver binary to path とコメントで記載があったが、上記インストール方法ではすでにパスが通っているようで問題なく実行できた。スクリプトが終了すると Chrome が終了し、表示が確認できる前に閉じられてしまったため、assert の代わりに sleep を入れて終了までに余裕を持たせている。

また、そのままスクリプトを終了させると webdriver のプロセスとブラウザーのプロセスが残る可能性があるため driver.quit() を最後に追加した*1

from selenium import webdriver
import chromedriver_binary  # Adds chromedriver binary to path
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.python.org")

sleep(10)
driver.quit()

実行すると Chrome が起動し、www.python.org のページが表示されること、少し待ってから Chrome が閉じられることを確認して環境構築はひとまず完了。

参考サイト

qiita.com

*1:同様の情報は多数見つかるのだが、webdriver のドキュメントでそのような記述を見つけられておらず引用を記載できず。処理内容を確認するためにはコードを読む必要があるかもしれない