ChromeDriver は、Chrome ブラウザをプログラムで動かすためのドライバーであり、ブラウザ上でのテストや操作を自動化するために利用されるツール。さまざまな言語で利用できるが、今回は Mac で Python を使って実行する環境を整備したため、手順と詰まった点を記事にしておく。
環境
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 が閉じられることを確認して環境構築はひとまず完了。
参考サイト
*1:同様の情報は多数見つかるのだが、webdriver のドキュメントでそのような記述を見つけられておらず引用を記載できず。処理内容を確認するためにはコードを読む必要があるかもしれない