前提
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
回答1件