[2024年度版]Google ColaboratoryでSeleniumを使ってスクレイピングする

Colaboratory
スポンサーリンク

ColaboratoryでSeleniumを動かす方法を調べていたのですが、数か月たっただけでインストールパスが変わったりするので、検索した情報では使えなくなっています

自分は以下の方法をそのまま試しましたができませんでした

ただ、下記コードをベースにエラーログを見ながら解決方法を探し動かすことが出来ました

Google ColaboratoryでSeleniumを使うための設定方法 | DevelopersIO
データアナリティクス事業本部のueharaです。 今回はGoogle ColaboratoryでPythonからSeleniumを使うための設定方法を紹介したいと思います。 はじめに 2023年5月時点では、Google …
ColaboratoryでSeleniumを簡単に動かす"Google-Colab-Selenium"
Google ColaboratoryでスクレイピングするときにChromeとChromedriverのバージョン違いでハマっている場合の解決法(コピペ編)|DukeRacca
とりあえず動けばいいんだよという人のために解決用コピペ 日本語の文字化け対策 chromeとchromedriverのバージョン違い対策 バージョン。 コメントは様々なところからコピペしてきているのでその名残+chatGPTによるコメント。 # 更新を実行 !sudo apt -y update # 日本語フォントイン...

本記事ではまず動いたプログラムについて、その後どの記事を参考にして修正したかを解説します

2024/4/1時点で動作するプログラム

ColaboratoryでSeleniumを動かすための環境構築

# 更新を実行
!sudo apt -y update

# 日本語フォントインストール
!apt install fonts-ipafont-gothic

# ダウンロードのために必要なパッケージをインストール
!rm -f *.deb
# 足りなくなったら継ぎ足していく(今回はlibvulkan1)
!sudo apt install -y wget curl unzip libvulkan1
# 以下は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

#stableversionのバージョン名だけを取得する
import json
import subprocess
import os

# curlコマンドを実行してデータを取得
curl_command = "curl -sS https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json"  # ここに取得したいURLを入力
completed_process = subprocess.run(curl_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# エラーチェック
if completed_process.returncode == 0:
    # 成功した場合、データはcompleted_process.stdoutに格納されています
    data = completed_process.stdout
else:
    # エラーが発生した場合、エラーメッセージはcompleted_process.stderrに格納されています
    error_message = completed_process.stderr
    print("エラーメッセージ:")
    print(error_message)

json_data = json.loads(data)
version_number = json_data["channels"]["Stable"]["version"]
#環境変数に入れる
os.environ["VERSION_NUMBER"] = version_number
print()
print(version_number)

# Chrome Driverのインストール
# 再実行した際に色々残っているとエラーになるので
!rm -rf /tmp/*
!wget -N https://storage.googleapis.com/chrome-for-testing-public/$VERSION_NUMBER/linux64/chromedriver-linux64.zip -P /tmp/


!unzip -o /tmp/chromedriver-linux64.zip -d /tmp/
!cp -rf /tmp/chromedriver-linux64 /tmp/chromedriver
!chmod +x /tmp/chromedriver/chromedriver
!mv /tmp/chromedriver/chromedriver /usr/local/bin/chromedriver

!pip install selenium

このプログラムで必要なツールを入れていきます

ツールが入ったか確認するコマンド

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

もし、インストールに成功すると以下のようにどちらとも同じバージョンが表示されるはずです

※2024/4/1時点は123.0.6312.86

Google Chrome 123.0.6312.86 
ChromeDriver 123.0.6312.86 (9b72c47a053648d405376c5cf07999ed626728da-refs/branch-heads/6312@{#698})

ツールが入って動作するかをテスト

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)

動作すると以下のような結果が返ってきます

クラスメソッド発「やってみた」系技術メディア | DevelopersIO

解説

Seleniumを動かすために必要なツール

動かすには以下の二つのツールが必要です

  • Chrome
  • Chrome Driver

参考にした以下のページではこの二つを入れているのは以下のコードです

Google ColaboratoryでスクレイピングするときにChromeとChromedriverのバージョン違いでハマっている場合の解決法(コピペ編)|DukeRacca
とりあえず動けばいいんだよという人のために解決用コピペ 日本語の文字化け対策 chromeとchromedriverのバージョン違い対策 バージョン。 コメントは様々なところからコピペしてきているのでその名残+chatGPTによるコメント。 # 更新を実行 !sudo apt -y update # 日本語フォントイン...
# Chromeのインストール
!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
!dpkg -i google-chrome-stable_current_amd64.deb

# Chrome Driverのインストール
# 再実行した際に色々残っているとエラーになるので
!rm -rf /tmp/*
!wget -N https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/$VERSION_NUMBER/linux64/chromedriver-linux64.zip -P /tmp/

参考にしたブログを実行した場合、Chrome Driverが入らない、もしくはChrome Driverのバージョンが間違っていることがログからわかりました

インストールパスを確認

なので、Chrome Driverのインストールパスを以下の公式ページで確認しました

するとインストールパスが変わっていることがわかりました

Chrome for Testing availability

このインストールパスの変更は定期的に起こるらしく、以下のページではバージョン115以降での変更点が書かれています

バージョン115以降のChrome用WebDriverのダウンロード方法 - ガンマソフト
Seleniumライブラリを用いてPythonでChromeブラウザを自動操作するときには、Chrome用のWebDriverが必要になります。 Selenium4.6.0からは自動ダウンロード機能が...

インストールパスを変更

なので、このインストールパスを以下のように変更することでChrome Driverがインストールされ、Seleniumが正常に動作しました

誤
!wget -N https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/$VERSION_NUMBER/linux64/chromedriver-linux64.zip -P /tmp/

正
!wget -N https://storage.googleapis.com/chrome-for-testing-public/$VERSION_NUMBER/linux64/chromedriver-linux64.zip -P /tmp/

追記

【Colab】永久保存版 Selenium環境の構築(Chrome for Testing を使用) - Qiita
背景現在のColab環境では、「!pip install selenium」 を実行するだけでスクレイピングの環境構築が完了します(chromeやchromedriverの導入不要)「以前はちゃ…

コメント

タイトルとURLをコピーしました