今回は、SeleniumをChromeで使用する際に、ChromeとChromeDriverのバージョンを合わせる方法を解説します。
現在のバージョンを確認する
現在のChromeのバージョンを確認する
まず、現在使用しているChromeのバージョンを確認します。Google Chromeを開き、右上の3点マークを押下>ヘルプ>Google Chromeについて の順でクリックします。
バージョンが表示されました。私の環境では「バージョン: 113.0.5672.64(Official Build) (64 ビット)」と表示されています。
現在のChromeDriverのバージョンを確認する
chromedriverの場所を確認
現在のChromeDriverのバージョンを確認するには、まずChromeDriverがある場所を確認します。コマンドプロンプトを起動し、以下コマンドを実行します。
where chromedriver
パスが通っている場合、chromedriverのフルパスが表示されます。
chromedriverがある場所に移動
フルパスのうち、chromedriver.exeを省いた部分をコピーします。カーソルを当てた状態でEnterキーを押すとコピーされます。コピーした内容は右クリックでペーストできます。
cd whereコマンドの実行結果のディレクトリ
例)cd C:\Program Files\selenium
chromedriverを起動
以下コマンドでchromedriverを起動します。
chromedriver.exe
※パスを通していない場合、上記方法は使えません。(プログラム内でchromedriverの場所を明記している場合)その場合には、以下の記事をご参照ください。
【方法1】ChromeDriverをインストールする方法
「ChromeDriver」は、Google社が公式に提供している、Google Chromeを動かすためのドライバーです。こちらが最も定番な方法かと思います。
ダウンロードページからドライバーをダウンロードする
ダウンロードページ(https://chromedriver.chromium.org/downloads)にアクセスします。先ほどの手順で、私の環境ではバージョン113を使っていることが分かったので、ドライバーもバージョン113をダウンロードします。
ダウンロードするバージョンの選び方
Chromeのバージョン番号と、ChromeDriverのバージョンは完全には一致してないかと思います。
例えば、今回であればChromeのバージョンが「113.0.5672.64」なのに対し、ChromeDriverは「113.0.5672.XX」と、最後の数字が異なります。
このような場合は、Chromeのバージョンよりも数値が小さく、その中で一番新しいものを選ぶようにしてください。
今回であれば「113.0.5672.63」です。
ダウンロードしたドライバーを適切な場所へ配置する
ChromeDriverをどこに置いたとしても実行はできます。極論、ダウンロードフォルダのままでも問題ないです。
ただし、きちんと管理していないと、プロジェクトが増えていったときにどこにドライバーの実体があるのか分からなくなってしまうので、以下を参考に配置してください。
システム全体で同じバージョンを使えれば良い場合
システムのPATH環境変数に含まれる場所に置いてあげると、実行時にPATHを通す必要がありません。具体的には、以下のいずれかに置いてあげると良いでしょう。
%Path% |
---|
C:\Windows\system32 |
C:\Windows |
C:\Windows\System32\Wbem |
この場合、ソース内でパスを通す必要はありません。ただし、次回更新時にどこに配置したか分からなくなってしまわないよう注意が必要です。
プロジェクトごとに異なるバージョンのドライバーを使いたい場合
プロジェクトごとに異なるバージョンのドライバーを使いたい場合には、そのプロジェクトがあるフォルダに配置します。
上記のように直接exeだけ置いても良いですし、chromedriver>ChromeDriver.exeという構成でもOKです。
【注意】置き換えの場合はプログラムを止めてから配置すること!
すでにChromeDriverを配置していて、新しいものに置き換える場合は、プログラムを止めてから置き換えるようにしてください。実行中は配置できません。
動作確認
以下のコードで動作確認をしてみます。以下は指定したWebページを開いて閉じるだけの簡単なコードです。
from selenium import webdriver
import time
options = webdriver.chrome.options.Options()
driver = webdriver.Chrome()
driver.get('https://prtn-life.com/blog/gpt4-api')
time.sleep(3)
driver.close()
これで問題なくWebページが開けばOKです。もし、
‘chromedriver’ executable needs to be in PATH
と出た場合には、明示的にChromeDriverの場所を記載して実行します。
driver = webdriver.Chrome(r'C:\Users\chaso\PythonProjects\ImageGrab\chromedriver')
最初についている「r」は、Pythonでパスをエスケープせずに書くときの方法です。
プロジェクトごとにChromeDriverのバージョンを意図的に分けている場合は明示的に書いたほうが良いかもしれません。なぜなら、プロジェクト内にドライバーを配置していなくとも、他のプロジェクト内のドライバーを認識して動いてしまうことがあるためです。
ドライバーの更新方法
Chromeが更新されたタイミングで、現在のドライバーでは動かなくなります。そのような場合には、ドライバーを更新する必要があります。
ドライバーのダウンロード
前述のダウンロードページから、最新バージョンをダウンロードします。
ドライバーを置き換える
現在のドライバーを、新しいドライバーで置き換えます。「ChromeDriverをどこに置いたか忘れた」という場合は、フォルダ検索で探します。C直下とかだと時間がかかるので、見当がついている場合はもう少し絞って検索することをおすすめします。
「chromedriver.exe」を新しいものに置き換えたら更新完了です。
【方法2】chromedriver-binaryを使う場合
次に、「chromedriver-binary」を使ってバージョンを揃える方法を紹介します。
chromedriver-binaryは、サードパーティのパッケージです。先ほど紹介したChromeDriverはChromeを自動操作するためのツールですが、chromedriver-binaryはツールそのものではありません。ChromeDriverのダウンロード+パスを通すというセットアップを自動でやってくれる助っ人のようなものと考えておけば良いと思います。
chromedriver-binaryをpipインストール
コマンドプロンプトからpipインストールします。以下、3通りの手順を載せていますので、目的に応じて適したものを実行してください。
最新バージョンをインストールする場合
pip install chromedriver-binary
このコマンドでは、最新バージョンのChromeDriverをインストールします。もし、テストや動作検証等でGoogle Chromeのバージョンを最新でないものにしている場合は、以下コマンドを実行してください。
Chromeのバージョンに自動で合わせる場合
pip install chromedriver-binary-auto
このコマンドでは、Google Chromeのバージョンに対応するドライバーを自動的にダウンロードします。
バージョンを指定してインストールする場合
バージョンを指定してインストールする際には、以下のようにバージョンを明記して実行します。
pip install chromedriver-binary == 91.0.4472.101.0
動作確認
以下のコードで動作確認してみます。
from selenium import webdriver
import chromedriver_binary # chromedriver_binaryをインポートしてパスを設定
import time
options = webdriver.chrome.options.Options()
driver = webdriver.Chrome()
driver.get('https://prtn-life.com/blog/gpt4-api')
time.sleep(3)
driver.close()
import chromedriver_binaryの役割
ChromeDriverをインストールしたときのソースコードと比べると、
import chromedriver_binary
が追加されています。これは、内部で以下のような処理がなされています。
- ChromeDriverの実行ファイルをパッケージ内にインストール
- 実行ファイルへのパスが自動的にPythonの環境変数PATHに追加される
- 2によって、ChromeDriverの実行ファイルを自動で見つけることができ、Google Chromeが起動される
つまり、chromedriver-binaryを使うと、プログラム実行時に自動でパスを通してくれているということです。
chromedriver-binaryを使う際、ChromeDriverの実体は、Pythonのsite-packages内にあります。これは、pip installした際に作成されます。
「import chromedriver_binary」によってここのパスが追加され、この中にあるドライバが動きます。
ChromeDriverのアップデート方法
Google Chromeが更新された場合には、以下コマンドでアップデートします。
pip install --upgrade --force-reinstall chromedriver-binary-auto
参考:https://pypi.org/project/chromedriver-binary-auto/
chromedriver-binaryのアンインストール方法
pip uninstall chromedriver-binary
このコマンドを実行することで、site-packagesディレクトリ内のchromedriver_binaryフォルダ、その中に格納されているchromedriver.exeも削除されます。
結局、どっちを使えばいいの?
ChromeDriverとGoogle Chromeのバージョンを揃える方法について、
- ChromeDriverを直接インストールする方法
- chromedriver-binaryを使う方法
の2つを紹介しました。結局どちらを使えば良いかは、以下を参考にしていただければと思います。
ChromeDriverがおすすめな場合
- テスト環境や動作確認などで、プログラムごとに使用するバージョンを指定したい場合
- 自由にセットアップしたい場合(パスを通せばどこに配置しても良い)
- 常に最新のバージョンを使いたい、更新されたらすぐに反映したい場合
chromedriver-binaryがおすすめな場合
- 手動でダウンロードや環境変数の追加をせずセットアップしたい場合
- 初心者の方
- 開発環境を汚したくない場合
個人的には、特にテストとかでなく普通に使う分にはchromedriver-binaryを使ったほうが良さそうだと思いました。
↑こちらは先ほども載せた画像ですが、「chromedriver」と検索しただけで複数見つかって、なかには現在使っていないものもありました。このように、過去のドライバーが残っていると、意図せず過去のドライバーを起動しようとして「バージョン古いよ」とエラーが出る可能性があります。
7/27追記:ChromeDriverに対象のバージョンがない場合
最新のGoogle Chromeがバージョン115なので、ChromeDriverもバージョン115をダウンロードしたい。しかし、バージョン115がまだリリースされていません。
リリースされたばかりのバージョンは、ChromeDriverがまだ公開されていないことがあります。このような場合は、Chrome for Testingのページからバイナリをダウンロードする方法があります。こちらでは、現在バージョン117まで提供されています。
バイナリのダウンロード手順
赤文字になっている「the Chrome for Testing availability dashboard.」を押します。
「Chrome for Testing availability」というページに遷移しますので、取得したいバージョンのURLをコピーします。
コピーしたURLを、ブラウザのアドレスバーに貼り付けます。
zipファイルを展開すると、対象の実行ファイルが入っています。
- chromedriverとブラウザのバージョンは互換性がある場合もありますが、一致させておくのが望ましいです。
- Chrome for Testingで提供されているブラウザはテスト版です。そのため、ふだん使っているChromeと混同しないよう、テスト用のディレクトリを作るなどして管理してください。
ソースコードで動かすバイナリを指定
Chrome for Testingでダウンロードしたバイナリで実行する場合は、以下のようにChrome(ブラウザ)のパスとchromedriverのパスを指定して動かします。
from selenium import webdriver
import time
chrome_options = Options()
# Chromeのパス
chrome_options.binary_location = r'C:\WINDOWS\system32\chrome\win64-115.0.5790.102\chrome-win64\chrome.exe'
# ChromeDriverのパス
driver_path = r''C:\WINDOWS\system32\chromedriver\win64-115.0.5790.102\chromedriver-win64\chromedriver.exe
# ブラウザを起動
driver = webdriver.Chrome(executable_path = driver_path, options=chrome_options)
# Yahoo!JAPANを開く
driver.get('https://www.yahoo.co.jp/')
# ページが開くまで3秒待機
time.sleep(3)
# ブラウザを閉じる
driver.close()
Chrome for Testingの使い方詳細は以下記事にて解説しています。
まとめ
今回は、SeleniumでChromeとChromedriverのバージョンを確認・そろえる方法について解説しました。
直接ドライバーをダウンロードする方法、Pythonの便利なパッケージでドライバーのインストール・パス追加をする方法について紹介しました。本当は、自動でバージョン更新する方法を書こうと思っていたのですが、書いているうちに手動更新の方法だけで一つの記事になってしまいました。。
自動でChromeDriverが更新できればベストではありますが、テスト環境だったり、勝手にバージョンアップされたら困るという場合もあるかと思います。なので、手動でバージョンを揃える方法もおさえておくと役にたつ日がくると思います。本記事が誰か一人でも役に立った!と思ってもらえたら嬉しいです。
コメント
バージョンが115に上がったんですが、ドライバはどうやって対応されてますか?
コメントありがとうございます。
chromedriverの公式ページを見ると、バージョン115は「近日公開予定」と記載がありました。
115が公開されるのを待つか、いったんChromeを削除して
過去バージョンをインストールするようになるかと思います。
因みに、Chrome for Testingバイナリでは、バージョン117まで提供されているようです。
https://googlechromelabs.github.io/chrome-for-testing/
使うにはNode.jsをインストールして、npmコマンドでchromedriverをインストールするようになるので、
急ぎでなければバージョンの更新を待つのが無難かと思います・・・!