Selenium WebDriverを利用してブラウザを自動操作するのに、以前は自分でドライバをダウンロードする必要がありましたが、Selenium4.6.0からは自動でダウンロードしてくれます。

これでドライバの事前準備が不要になりました

さらに、Selenium4.11.0からはChromeブラウザがインストールされていなければ、自動でダウンロードして起動してくれるので、ブラウザすら準備しなくても済むようになりました。

今回は、Seleniumのユーザビリティを格段に向上してくれたこの新しい機能について、簡単な例を使用してわかりやすく説明します。

本記事の目次
本記事ではSelenium4.19をWindows11+Python3.10の環境で実行しています。

ドライバの自動ダウンロード(Selenium4.6.0〜)

Selenium4.6.0(2022.11.04リリース)より前は、ドライバは自分で公開サイトからダウンロードして、コードで直接ファイルを指定したり、PATHを通して読み込ませていました。

例えば、コードで直接ファイルを指定する場合は、以下のようにコーディングしていました。

以前のコードの書き方
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# ダウンロードしたドライバのパスを指定
service = Service(executable_path="driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)

# ... スクレイピングなどの処理

driver.quit()

それがSelenium4.6.0からは、以下のようにwebdriver.Chrome()を呼び出すだけ済みます。

新しいコードの書き方
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# これだけでOK
driver = webdriver.Chrome()

# ... スクレイピングなどの処理

driver.quit()

これだけでインストールされているChromeのバージョンに合うドライバを自動でダウンロードして読み込んでくれます。

さらに、Chromeのバージョンが新しくなっても、その都度ドライバも新しいバージョンをダウンロードしてくれるので、メンテナンスがとても楽になりました。

Selenium4.6.0以降でも、従来のようにドライバを手動で指定することも可能です。

ブラウザの自動ダウンロード(Selenium4.11.0〜)

さらに、Selenium4.11.0(2023.07.31リリース)からは、コードからChromeブラウザを呼び出してパソコンになければ、自動でダウンロードしてくれます。ただし、ダウンロードされるのは「Chrome for TestingCFT)」と呼ばれるChromeのテスト用の縮小版です。

実際にChromeをインストールしていないパソコンで以下の簡単なコードを実行してみます。

from selenium import webdriver
import time

driver = webdriver.Chrome()

time.sleep(10)
driver.quit()

しばらく待つと以下のようなブラウザが起動します。上部に「Chrome for Testing ~ は、自動テスト専用です。」と表示され、通常のChromeではなくテスト用(CFT)であることがわかります。

テスト用(CFT)のChrome

Chrome for Testing

初回はブラウザのプログラムファイルをダウンロードしてくるので、起動までに少し時間がかかります。

バージョンを指定する方法

テスト用のChrome(CFT)を使うとバージョンの指定が容易になるメリットがあります。例えば、以下のようにコードで指定すれば、毎回バージョン120のテスト用のChromeが起動します。

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.set_capability("browserVersion", "120")  

driver = webdriver.Chrome(options=options)

time.sleep(10)
driver.quit()

通常のChromeはデフォルトでは自動更新されますが、これでバージョンを固定したテストが可能になります。さらに、stablebetaなどのラベルも指定できるので、以下のようにbetaを指定すれば、常に次期バージョンでテストすることもできます。

options.set_capability("browserVersion", "beta") 

自動ダウンロードされたドライバとブラウザの保存場所

自動でダウンロードされたドライバとブラウザは以下のフォルダに保存されます。

C:/Users/ユーザ名/.cache/selenium/

ドライバとブラウザは、それぞれ以下のようなフォルダに保存されます。

selenium cache

もしも、Chromeブラウザが新しいバージョンに更新された場合は、Selenium起動時に検知され、新しいドライバが自動でダウンロードされ、以下のようにバージョンごとに保存されます。

chromedriver.exe folder

PythonのコードからSeleniumを利用してChromeを起動すると、バージョンを検知し適合するドライバが上のフォルダにあればそこから読み込み、なければ新しくダウンロードしてくれます。

Selenium4.6.0からSelenium Managerが同梱!

上記のドライバやブラウザの自動ダウンロードは「Selenium Manager」と呼ばれるツールが実行しています。

Selenium Managerは、Selenium4.6.0から同梱されており、pip install seleniumを実行すると、Seleniumと一緒にインストールされます。

Selenium Managerは、クロスプラットフォームでの実行を可能にするためRustというプログラミング言語で開発されており、Windowsの場合は以下の場所に実行ファイル(selenium-manager.exe)が保存されます。

# Python3.10をWindows11にデフォルトのままインストールした場合
C:/Users/ユーザー名/AppData/Local/Programs/Python/Python310/Lib/site-packages/selenium/webdriver/common/windows/selenium-manager.exe

Selenium Managerはコマンドで実行できます。試しにコマンドプロンプトから実行してみると、以下のようにドライバとブラウザがインストールされているかをチェックし、なければダウンロードしてくれるのがわかります。

Selenium Manager CLI

最後に

このようにSelenium Managerが同梱されたおかげで、Seleniumは格段に使いやすくなりました。ただし、本記事の執筆時点(2024.04.11)ではベータ版ですので、最新情報については、以下の公式情報でチェックするようにしてください。

https://www.selenium.dev/blog/