見出し画像

【トラブルシューティング】 Google ColaboratoryでSeleniumを使用する際に発生する「WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 1」の原因と解決策。

【またか!chromedriverのpathか!】


世の中が。ChatGPTやAIについての話題で持ちきりのなか、せっせとGoogle Colaboratoryのトラブルシューティングについて書くことは、果たして役に立つのだろうか?

しかしこの記事が困っている人に、まるでさっきまでの自分の様な、エラーの国のアリス達に届いたらいいな。
そんな気持ちで書いてます。

早速いきましょう。

先月、隠れキリシタンのように職場のPCでプログラミングをしていたところ、以下のようなエラーが吐き出されました。

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

要は「予期せぬ形でchromedriverが終了している」と言っている様です。

大体このエラーは、chromedriverのpath設定が上手くできていない時に起こるもの。

しかし、前に見たエラーとなんか違う!?

調べてみるGoogle Colaboratoryでスクレイピングをしようとすると、同じ様なエラーが出てる記事がチラホラ出てくる。

要はエラーの理由をまとめると

  1. Google Colabの新しいバージョンが出たら

  2. chromium-browserのインストール方法が変更されて

  3. chromium-browserの新しいバージョンが正しく動作しなくなった。

  4. だから特別なコマンドを使って修正する必要があるよ

こんな意味の様です。

修正コマンドはこちら↓

%%shell
# Ubuntu no longer distributes chromium-browser outside of snap
#
# Proposed solution: https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap

# Add debian buster
cat > /etc/apt/sources.list.d/debian.list <<'EOF'
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
EOF

# Add keys
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A

apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg

# Prefer debian repo for chromium* packages only
# Note the double-blank lines between entries
cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
Package: *
Pin: release a=eoan
Pin-Priority: 500


Package: *
Pin: origin "deb.debian.org"
Pin-Priority: 300


Package: chromium*
Pin: origin "deb.debian.org"
Pin-Priority: 700
EOF

# Install chromium and chromium-driver
apt-get update
apt-get install chromium chromium-driver

# Install selenium
pip install selenium

参照:https://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10

上記のコードを入力したあと、試しにココナラをスクレイピングしてみると

import requests
from time import sleep
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pandas as pd

options = Options()
options.add_argument("--headless") # or use pyvirtualdiplay
options.add_argument("--no-sandbox") # needed, because colab runs as root

options.headless = True

driver = webdriver.Chrome("/usr/bin/chromedriver", options=options)

driver.implicitly_wait(10)

max_page = 1

for n in range(max_page):
  driver_url = f'https://coconala.com/requests/categories/230?recruiting=true&categoryId=230&page={n}'
  driver.get(driver_url)
  print(driver_url)
  sleep(4)

  html = driver.page_source
  d_list = []
  soup = BeautifulSoup(html, 'lxml')
  print(soup)

問題なくスクレイピング出来ました。
seleniumがちゃんと動いてますね。

プログラミングの難しさは、こういったちょっとした仕様の変化に対応できるかどうか、調べて、自己解決能力が問われる点にあるのではないでしょうか。
しかし同時に、パズルを解くような面白さを感じる部分でもある。

エラーを楽しめる様になったのもはやたす先生のおかげ。
本当に感謝感謝、感謝のスクレイピングです。

最近はPCの前で、祈る時間が増えました。

https://twitter.com/home?lang=ja


この記事が気に入ったらサポートをしてみませんか?