質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

4386閲覧

Google Colab 上で Selenium の Webdriver が動かなくなった(Ubuntu 20.04 対応?)

sigma_user

総合スコア1

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2023/01/19 13:50

編集2023/01/19 14:16

前提

google colabでseleniumを使って自動でスクレイピングしていたのですが、例外が発生してwebdriverが動かなくなりました。

ログを見ると少なくとも18日の朝4時までは問題なく動作していたのに、こちらから手を加えることなく例外が発生するようになったため、初心者ということもあり混乱しています。。。

調べたところ、どうやら18日に Colab がデフォルトのランタイムを数年ぶりに変更、 Ubuntu 18.04 LTS から Ubuntu 20.04 LTS にアップデートされ、それにより他のユーザーにも同様の問題が発生しているらしいのですが、色々と試しても例外に対処できずにいます。

参考リンク

Colab が Ubuntu 20.04 LTS にアップデートされました(Colab公式ブログ)

Google Colab で Selenium を使用するプログラムを何ヶ月も実行しています。今夜まで問題はありませんでした。(github)

実現したいこと

  • google colab 上で seleniumのwebdriverを動かすにあたり例外に対処

発生している問題・エラーメッセージ

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

該当のソースコード

python

1!apt-get update 2!apt install chromium-chromedriver 3!cp /usr/lib/chromium-browser/chromedriver /usr/bin 4!rm /etc/localtime 5!ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 6 7!pip install selenium==4.7.0 8!pip install chromedriver-binary-auto 9!pip install webdriver-manager 10!pip install jedi==0.17.2 # !pip check したらこれが必要とのことでとりあえずインストール 11 12from selenium import webdriver 13import chromedriver_binary 14 15from webdriver_manager.chrome import ChromeDriverManager 16from selenium.webdriver.chrome.service import Service as ChromeService 17 18options = webdriver.ChromeOptions() 19options.add_argument('--headless') 20options.add_argument('--no-sandbox') 21options.add_argument('--disable-dev-shm-usage') 22 23# 前使えたコードのままこちら↓を実行すると18日以降先ほどの例外が発生 24driver = webdriver.Chrome('chromedriver',options=options) 25# WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 1

実際よりもコードを大幅に簡略化しているのでこれで使えたという証明ができませんが、発生する例外は実際のコードでも同じなのでおそらくこの部分がコアだと思います。

試したこと

◆試したこと①

コード置き換え

例外の解決手段を調べてコードを置き換えてみました。

python

1# 調べたコードを参考に先ほどの最後の行を以下に置き換えて実行すると別の例外が発生 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.service import Service as ChromeService 4driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options=options) 5# WebDriverException: Message: Service /(パス)/chromedriver unexpectedly exited. Status code was: -6

結果、例外のStatus codeが1から-6に変わったくらいで、こちらの例外について調べても要領を得ず、、、


◆試したこと②

Colabのフォールバック ランタイム バージョンを使用

上記Colab公式ブログにはこう書いてあります。(翻訳版)

フォールバック ランタイム バージョンを使用すると、一時的に Ubuntu 18.04 LTS ランタイムにアクセスできるようになり、1 月下旬まで利用できるようになります。これは、ランタイムに接続されているときに、「フォールバック ランタイム バージョンを使用」コマンドを介してコマンド パレットから使用できます。この設定はセッション間で保持されないことに注意してください。新しいセッションごとにコマンドを呼び出す必要があります。

Colabコマンドパレットから「代替ランタイムバージョンを使用する」を選択しましたが、今度はColabのセル実行そのものができないまま止まってしまう状況。(上記の簡略化したコードではなく実際のコードはセルが5つくらいに分かれており、その2つめのセルくらいで実行が止まってしまうのです)

また、フォールバックランタイムはセッション間で保持されないため毎度手動で呼び出す必要があり、何よりも1月末以降は使えなくなると書いてあります。
よって、いずれにせよ根本解決にはならなさそうです。


◆試したこと③

macターミナルでDebianからcromiumの互換性のあるバージョンをインストール

上記githubに投稿された同様の問題へのmetrizableという開発チームの方らしきアカウントからのコメント(以下に引用)によると、 Ubuntu 20.04 以降では chromium-chromedriver が配布(?)されなくなったことが問題の模様。

Thanks for using Colab. I understand that you'd like to use selenium with chromium-browser under Ubuntu 20.04 LTS. Although YMMV, since Ubuntu 20.04+ no longer distributes chromium-browser outside of a snap package, you can install a compatible version from the Debian buster repository:

このコメントによると、下記コマンドを実行することで互換性のあるchromedriverをインストールでき、それで問題が解決したようです。

shell

1%%shell 2# Ubuntu no longer distributes chromium-browser outside of snap 3# 4# Proposed solution: https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap 5 6# Add debian buster 7cat > /etc/apt/sources.list.d/debian.list <<'EOF' 8deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main 9deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main 10deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main 11EOF 12 13# Add keys 14apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517 15apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 16apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A 17 18apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg 19apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg 20apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg 21 22# Prefer debian repo for chromium* packages only 23# Note the double-blank lines between entries 24cat > /etc/apt/preferences.d/chromium.pref << 'EOF' 25Package: * 26Pin: release a=eoan 27Pin-Priority: 500 28 29 30Package: * 31Pin: origin "deb.debian.org" 32Pin-Priority: 300 33 34 35Package: chromium* 36Pin: origin "deb.debian.org" 37Pin-Priority: 700 38EOF 39 40# Install chromium and chromium-driver 41apt-get update 42apt-get install chromium chromium-driver 43 44# Install selenium 45pip install selenium

最初にshellと書かれていたのでよくわからないながらもmacのターミナルで実行しようとしました。

が、何度やっても11行目の「EOF」を入力すると、catコマンドで作成したはずのファイルが見当たらないと言われ(下記メッセージ)、調べても解決方法がわからず、万策尽きてこちらに質問させていただきました。

zsh: no such file or directory: /etc/apt/sources.list.d/debian.list

上記7行目~10行目のcatコマンドを1行ずつ実行すると、ターミナルのプロンプトが「heredoc>」に変わっているので、7行目のcatコマンドのうち少なくとも「<<'EOF'」の部分は認識できているようです。

こちらをColabの別のセルに追記して実行しても、例外は変わらないままでした。

個人的な話ですが、初心者で諦めずコツコツ勉強して今月やっと自動でスクレイピングができるシステムを組むことが叶い、順調に動き出したところにいきなり数年ぶりのアップデートにぶつかり、情報も本当に少なくて心が折れそうでした。

ご教授よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

mac OS 12.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/01/19 14:12

試したこと③もColab上で実行しないといけません。
sigma_user

2023/01/19 15:13

ありがとうございます。 試したこと③をColab上の別セルで先に実行した上で、githubのコメントを参考に最後の行を options.headless = True driver = webdriver.Chrome("/usr/bin/chromedriver", options=options) に置き変えたところ、実際のコードも動作しました!ありがとうございました。
退会済みユーザー

退会済みユーザー

2023/01/19 15:22 編集

解決したとのことで、修正。
guest

回答1

0

自己解決

自己解決ではないですが、コメントをいただいて、試したこと③のコードをmacのターミナルではなくColabの別セルにて実行し、最後の行を以下に置き変えたところ、簡易コード、実際のコード共に動作しました。

python

1options.headless = True 2from selenium.webdriver.chrome.service import Service as ChromeService 3driver = webdriver.Chrome(service=ChromeService("/usr/bin/chromedriver"),options=options)

試したこと②のフォールバックランタイムバージョンがそのままだったようで最初はできませんでしたが、
「ランタイム」メニュー > 「セッションの管理」にてセッションを一旦終了し、再度実行したところwebdriverが動作したので解決です。

ただ、webdriverが変わった所以なのか、webdriverでボタンなどをクリックしようとしたときに別の問題として「Message: element not interactable」が各所で発生するようになったようです。まずはちまちまコードを直して対処してみます。

投稿2023/01/19 15:41

sigma_user

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問