17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GoogleColaboratoryにSeleniumの実行環境を用意する(失敗)

Last updated at Posted at 2018-07-19

最近GoogleColaboratoryでスクレイピングを試しています。
今日は自動テストなどに用いるSeleniumをGoogleColaboratoryで動かせないかチャレンジしてみました。

参考にしたのはこちらのQiita記事。
Colaboratory上でSeleniumが使えないか試した(そしてダメだった)
結論から言いますと、ぼくも失敗しました。

Seleniumとは

Seleniumとは、Webブラウザを使ってWebアプリケーションをテストするツールです。この「Webブラウザを使って」というのが非常に大きなポイントで、人が手でWebブラウザを操作する代わりにSeleniumがWebブラウザを操作してくれるのです。(https://thinkit.co.jp/free/article/0705/2/1/)

こいつ本当にすごくて、ログイン必要なサイトも簡単にスクレイピングができる超すぐれものです。本当はテストツールなんですが、負荷が大きいことを除けば怖いもの知らずのスクレイピングツールになります。

ちょうど去年の今頃、このツールでいろいろ試していたので、興味があれば見てみてください。

PythonとSeleniumで自分のツイートを抽出する
JavaとSeleniumで自分のツイートを抽出する

1.必要なモジュールをインストールする

まずはSeleniumに必要なモジュールを整えていきます。

Console
!pip install selenium
!wget https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip
!unzip chromedriver_linux64.zip

ここまでは普通にクリア。やっていることは大きく2つです。

  1. Seleniumをインストールする
  2. GoogleChromeを制御するChromeDriverをダウンロードして、ZIPを解凍する

2.実行してみる(1回目)

今回実行で使うのは、最初に紹介したQiitaの記事をそのままやります。

sample01.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# headless-chromeの立ち上げ 
options = Options()
options.add_argument('--headless')
executable_path="/usr/local/bin/chromedriver"
service_args=["--verbose", "--log-path=/content/chromedriver.log"]

driver = webdriver.Chrome(chrome_options=options, executable_path=executable_path, service_args=service_args)

# Googleのトップ画面を開く
driver.get('https://www.google.co.jp/')
print(driver.page_source)

結果はこちら

実行結果
WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

案の定エラーです。これはchromedriverにパスが通ってないので、まずはこれに対処します。

3.chromedriverのパスを通す

そもそもこれchromedriverどこにインストールされたんだ?と疑問に思ったので探します。

Console
!pwd
!ls

Colaboratoryでは、!をつければ普通にLinuxのコードが動くので、ディレクトリを探してみます。
結果はこちら。

実行結果
/content
chromedriver  chromedriver_linux64.zip	datalab

どうやら今いるディレクトリが「content」で、ファイル下に「chromedriver」がありそうです。
というわけで、execute_pathを「/content/chromedriver」に変更してみます。

2回目実行してみます。chromedriverのパスを修正するのに加えて、いくつかコードを書き換えています。

sample02.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(executable_path="/content/chromedriver", chrome_options=options)

# Googleのトップ画面を開く
driver.get('https://www.google.co.jp/')
print(driver.page_source)

結果はこちら。すんなりは通してくれません。

実行結果
WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127

今度はエラー127に対応していきます。

4.Status code 127を解決する

どうも調べてみると、このエラーコードがでるときは、必要なパッケージをインストールできてないときらしいです。

Python selenium ChromeDriver がエラー127 で起動しない場合、libgconf2 をインストール

というわけで、指示通りこちらで対応

Console
!apt install libgconf2-4

ここで改めて実行するものの、
しかしこれでもなお出てくるエラー。コードは変わらず127。

実行結果
WebDriverException: Message: Service /content/chromedriver unexpectedly exited. Status code was: 127

そこでchromedriverを単体で実行してみます。

Console
!/content/chromedriver

結果はこちら

実行結果
/content/chromedriver: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

どうもここらへんが怪しいので、途中に出てくる「libnss3.so」で検索すると、「libnss3-dev」というパッケージをインストールする必要があるとのこと。

Console
!apt install libnss3-dev

これでひとまず準備完了。改めて実行してみると

実行結果
WebDriverException: Message: Service /content/chromedriver unexpectedly exited. Status code was: -6

ちょっと心が折れそうですが、ひとまずエラーコードは変わりました。127は解決した模様。
改めてchromedriverだけ単体で起動してみると、こちらもエラーコードは変わっていました。

実行結果
src/tcmalloc.cc:283] Attempt to free invalid pointer 0x117499c73fc0 
Aborted (core dumped)

とりあえずこの後、もう少しいろいろやればパスは通ってるしできないことなさそうなんですが、ステータスコード−6に関する記事があんまり見つからないんですよね。

今日はここまで。明日以降またがんばります。

本記事はこちらの転載になります
GoogleColaboratoryにSeleniumの実行環境を用意する(失敗)

17
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?