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

image 1024x490

stage for security updatesをクリック

image 1 1024x501

View package detailsをクリック

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

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

を選びましょう。

image 2 1024x349

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

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

image 3 1024x489

armhfをクリック

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

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

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

image 4 1024x490

ここから下へスクロール

image 5 1024x482

今回の例では「chromium-chromedriver_79.0.3945.79-0ubuntu0.19.04.3_armhf.deb」を選択

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

image 6

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

ここからは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
2

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

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

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

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

1dpkg: 依存関係の問題により chromium-chromedriver の設定ができません: chromium-chromedriver は以下に依存(depends)します: libc6(>= 2.29) ...しかし:  システム上の libc6:armhf のバージョンは 2.24-11+dev9u4 です。
2

image 7

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

こうした場合の対処としては色々とありますが、別のドライババージョンを試すというのが良いかと思います。上記の該当ドライバを探すで他のバージョンを探してみましょう。今回バージョン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
2

下記コードを貼り付けた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()
21

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

1python sample.py
2

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

最後に

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


関連記事

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

    genkidama.jpg

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

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

    chromium.png

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

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

    smart-home.jpg

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

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

    f81fd2e4c52864042852c112ce927ae2.png

    曖昧なタイトルですが、使用しているSelenide/Spring Boot…

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

    DSC_0285.jpg

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