Raspberry piでseleniumがやっと動かせた

Raspberry piでseleniumがやっと動かせた
カテゴリ
技術
タグ
Raspberry Pi
Selenium

最新の情報を探せず、大変苦労したのでここに残します。この先も使えるやりかたとなるように記載します。

やりたいこと

  • Raspberry pi(Raspbian)上でseleniumを動かしたい。
  • そのために、ChromeのWebドライバが必要なので取得したい。

障壁

しかし、問題なのはChromeドライバが Raspberry pi (Raspberry piで使われているCPUであるarmhfアーキテクチャ) 向けには公式から提供されていないこと。なので各種パッケージ管理ツールから落としてきても上手く動きません。

また、Chromeの更新頻度が早いので、以前はできていたものも今は出来なくなっていたりします。そうした過去の情報に惑わされて四苦八苦しました。

手順

以下のサイトで Raspberry pi向け(armhfアーキテクチャ)のChromiumドライバを配布してくれています。ですが、目的の場所に遷移するのが非常に大変です。ブラウザでこのサイトから該当ファイルのリンクを取得しましょう。

該当ドライバを探す

https://launchpad.net/~canonical-chromium-builds

stage for security updatesをクリック
View package detailsをクリック

遷移した先のページの下のほうにいろいろなパッケージが一覧化されているはずです。それらの中で、

  • chromium-browserとあるもの(下記青枠で囲っているような)
  • Build Statusが「✔」となっているもの (下記青枠で囲っているような)
  • まずはよりバージョン番号が大きいもの

を選びましょう。

今回の例では「chromium-browser – 79.0.3945.79-0ubuntu0.19.04.3 」を選択します

それを選択するとアコーディオンメニューが開くので、そこから「armhf」というリンクを探しクリックします。

armhfをクリック

すると、以下のような画面に遷移しますので、下へスクロールして「Built files」という項目を探します。そこで、

  • chromium-chromedriverとだけあるもの(dbgsymなどの余計な名称がついていないもの)
  • 改めて「armhf」向けであることを確認

上記を満たすものを見つけてください。

ここから下へスクロール
今回の例では「chromium-chromedriver_79.0.3945.79-0ubuntu0.19.04.3_armhf.deb」を選択

該当ドライバを右クリックしてリンクのURLを取得してください(OSやブラウザによって操作は少し異なるかもしれません)。
また、別の手段として一旦ダウンロードしてから、FTP等でRaspberry piに送ってもよいです。

ドライバ取得とインストール

ここからはRaspberry pi上での操作です。
上記で取得したURLを使って、Raspberry piの「wget」コマンドでファイルを取得します。単純にwget の後にリンクを貼り付けるだけでダウンロードされます。(以下は今回の例。コピーしたリンクによってhttps以降の部分は変わります。)

1wget https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+build/18233993/+files/chromium-browser_79.0.3945.79-0ubuntu0.16.04.1_armhf.deb

続いてこれをインストールします。拡張子が「.deb」とありますが、これはパッケージ管理システムで解釈できる形式なので、コマンド一発でインストールできます。「dpkg -i」として引数にダウンロードしたファイルの名称を指定してください。(”chromi”くらいまで入力してtabキーを押せば補完されるはずです。)

1sudo dpkg -i chromium-browser_79.0.3945.79-0ubuntu0.16.04.1_armhf.deb

インストールできない場合

上記の手順を行っても、下記のエラーなどでインストールできないと言われる可能性があります。(実際今回の例で使用していたバージョンは以下のエラーがでます)

1
インストール時に依存関係エラーが発生

こうした場合の対処としては色々とありますが、別のドライババージョンを試すというのが良いかと思います。上記の該当ドライバを探すで他のバージョンを探してみましょう。今回バージョン79系がダメでしたが、実は75系もダメで、65系ならばインストールできました。
参考までに以下リンクです。

https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+build/14482955/+files/chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

他の解決方法としては、該当の依存ライブラリを更新するといったことが挙げられますが、ドツボにはまる可能性はあります。

Seleniumの動作確認

これでChromeドライバの準備は整ったので、簡単なプログラムを動かしてみます。

前提

pythonがインストールされていること

手順

Seleniumをインストールする必要がありますので、pipでインストールします。

1pip installl selenium

下記コードを貼り付けたpythonファイルを作成して(例えばsample.py)、実行します。このコードでは、yahooのトップページにアクセスして、そのスクリーンショットを画像保存しているだけです。

1from selenium import webdriver
2from webdriver_manager.chrome import ChromeDriverManager
3import traceback
4def main():
5    try:
6        chrome_option = webdriver.ChromeOptions()
7        chrome_option.add_argument('--headless')
8        chrome_option.add_argument('--disable-gpu')
9        chrome_option.add_argument('--no-sandbox')
10        chrome_option.add_argument('--disable-setuid-sandbox')
11        driver = webdriver.Chrome(executable_path="/usr/lib/chromium-browser/chromedriver", options=chrome_option)
12        driver.get("http://www.yahoo.co.jp")
13        driver.save_screenshot('screenshot.png')
14        driver.quit()
15    except:
16        print(traceback.format_exc()) 
17        driver.quit()
18
19if __name__ == '__main__':
20    main()

実行方法は、以下の通りです。(ファイル名は適宜変更してください。)

1python sample.py

エラーが発生せずに終了し、同ディレクトリにscrrenshot.pngというファイルが作成されていれば成功です。(試しにその画像を見てみてください。)

最後に

これで、SeleniumがRaspberry piで動くようになるので、ここからSeleniumを使った開発ライフを送りましょう。


関連記事

  1. RaspberryPi4で新型コロナウイルス解析に貢献する

    はじめに 2019年末より、新型コロナウイルス(COVID-19)のパンデミックで世界中が大打撃を受けています。この感染拡大を防ぐべく、エンジニアとして何かできることは無いかと思い、「分散コンピューティングにRaspbe […]

  2. Raspberry piでseleniumがやっと動かせた

    最新の情報を探せず、大変苦労したのでここに残します。この先も使えるやりかたとなるように記載します。 やりたいこと Raspberry pi(Raspbian)上でseleniumを動かしたい。 そのために、Chromeの […]

  3. LINEメッセージをGoogle Homeに喋らせる方法【Raspberry Pi3使用】

    表題の通り、例えば外にいる人がLINEで「これから帰ります」と打つと、家のGoogle Homeが読み上げてくれて、LINEに気づかなくても分かるようになるという生活ハックです。 逆の、Google HomeからLINE […]

  4. Selenide × Spring Bootだと上手く動かない場合がある【バージョン依存】

    曖昧なタイトルですが、使用しているSelenide/Spring Bootそれぞれのバージョンに依存する問題のため、組み合わせによって動かない”場合がある”のでこう表現しています。 事象 問題の事 […]

  5. RaspberryPiのインストール中に初期画面に戻ってしまう現象

    Raspberry Pi3のインストールに初っ端からハマりました。インストールが全然進まず、エラーメッセージも無くすぐに初期画面に戻り、無限ループを繰り返すしかなくなります。原因が気付きにくかったのでここに残しておきます […]