Google ColaboratoryでSeleniumを使うための設定方法

2023.05.01

データアナリティクス事業本部のueharaです。

今回はGoogle ColaboratoryでPythonからSeleniumを使うための設定方法を紹介したいと思います。

はじめに

2023年5月時点では、Google Colaboratory上で単純に!apt install chromium-chromedriverでchromedriverをインストールした後、Seleniumを実行しようとしても以下のようなエラーが発生し強制終了してしまいます。

WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1

これは、今年の1/18にColabのデフォルトのランタイムが(数年ぶりに)Ubuntu 18.04 LTSからUbuntu 20.04 LTSに変更になり(参考)、chromium-browserがsnapパッケージの外では配布されなくなったことが原因のようです。

対処法を少し調べてみると、Debian Buster等のリポジトリを追加し、優先度を変更して追加したリポジトリから優先的にchrome*のパッケージを入手するコマンドのコピペが種々のページで紹介されていました。

それでも解決できるのですが、その中にはapt-key adv --keyserver ~~~ --recv-keys ~~~で鍵を追加したりといったあまり良しとされていない処理も含まれていたり、実行しないといけないコマンドも多いので、今回は別の方法を紹介したいと思います。

※どうしてもリポジトリを追加する方法でやりたい!という方は、以下を参考に鍵を追加すると良いと思います。

Google ColaboratoryでSeleniumを使うための設定

結論ですが、Colab上で以下を実行することでStable(安定版)のchromeとchromedriverのインストールを行うことができます。

%%shell

# 更新を実行
sudo apt -y update

# ダウンロードのために必要なパッケージをインストール
sudo apt install -y wget curl unzip
# 以下はChromeの依存パッケージ
wget http://archive.ubuntu.com/ubuntu/pool/main/libu/libu2f-host/libu2f-udev_1.1.4-1_all.deb
dpkg -i libu2f-udev_1.1.4-1_all.deb

# Chromeのインストール
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb

# Chrome Driverのインストール
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P /tmp/
unzip -o /tmp/chromedriver_linux64.zip -d /tmp/
chmod +x /tmp/chromedriver
mv /tmp/chromedriver /usr/local/bin/chromedriver

実行が完了したら、それぞれのバージョンを念のため確認します。

!google-chrome --version
!chromedriver --version

2023年5月時点ですが、それぞれのバージョンは以下のようになっておりました。

chromeとchromedriverの準備ができたので、次はSeleniumパッケージをインストールします。

特に難しい作業はなく、以下でインストール可能です。

!pip install selenium

Seleniumの起動テスト

以下のスクリプトを実行し、DevelopersIOのタイトルが取得できるか確認します。

from selenium import webdriver


URL = "https://dev.classmethod.jp/"

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--no-sandbox")

driver = webdriver.Chrome(
    options=options
)

driver.get(URL)
title = driver.title
driver.close()

print(title)

以下のように表示できていれば成功です。

最後に

今回はGoogle ColaboratoryでPythonからSeleniumを使うための設定方法を紹介しました。

本記事がどなたかの参考になりましたら幸いです。

参考文献