広告 デバイス

【解説】Raspberry Pi+Docker+selenium環境構築

※本ページには、プロモーション(広告)が含まれています。

悩んでいる人
悩んでいる人

Web開発やWebアプリを利用する上で、コマンドラインからブラウザを操作したい。

実現方法を教えて欲しい。

こんなお悩みを解決します。

今回は、Raspberry Pi、Docker、seleniumを用いて、PythonによるGoogle Chromeブラウザの操作環境を構築します。

前提条件

まず、前提条件を揃えるために、私が利用しているハードウェアやソフトウェアのバージョンを示しておきます。

Raspberry Pi

Raspberry Piは、「Raspberry Pi 4 Model B 8GB」を利用します。

OS

OSは、「Raspberry Pi OS Lite 64bit版」を利用します。

uname -a
Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
cat /etc/issue
Debian GNU/Linux 11 \n \l
cat /etc/debian_version
11.3

Docker

Dockerは、rootlessバージョンを利用します。

docker --version
Docker version 20.10.14, build a224086

docker-compose

docker-composeは、バージョン1.29.2を利用します。

docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.3
CPython version: 3.9.2
OpenSSL version: OpenSSL 1.1.1n  15 Mar 2022

環境構築

ここでは、以下のような構成を考えます。

構成

それぞれのコンテナと使用するポートの関係は以下のようになります。

コンテナ名説明使用するポート番号
seleniumseleniumで操作するブラウザが起動するコンテナ
使用するブラウザ:Google Chrome
4444(appコンテナ用)
5900(VNC client用)
7900(noVNC client用)
appseleniumコンテナで起動しているブラウザを制御するためのコンテナ4444(seleniumコンテナ用)
コンテナ名と使用するポート番号

ここで、Port 5900とPort 7900は、それぞれHost OSと共有するポートで、5900がVNC client用、7900がブラウザ用となります。

また、7900にアクセスする際はsecretというパスワードを入力する必要があります。

すなわち、VNC clientで宛先をRaspberry Pi、ポート番号として5900を指定すると、seleniumコンテナ上で起動しているGoogle Chromeブラウザにアクセスできます。

また、ブラウザからhttp://raspberrypi-ip-address:7900/にアクセスした場合もseleniumコンテナ上で起動しているGoogle Chromeブラウザにアクセスできます。

実装結果は、以下に格納してあります。

https://github.com/yuruto-free/docker-selenium-raspberrypi/tree/master

動作確認

今回は、Googleで「wikipedia」と検索し、最初に表示される検索結果の情報を取得してみたいと思います。

該当する部分の実装は以下のようになります。

def test_func(driver, wait):
    # access to google
    driver.get('https://google.com')
    # search "wikipedia"
    driver.find_element(By.NAME, 'q').send_keys('wikipedia' + Keys.RETURN)
    # wait until the search results are displayed
    result = wait.until(presence_of_element_located(
        (By.CSS_SELECTOR, 'h3')
    ))
    text = result.get_attribute('textContent')
    print(text)

実行結果は、以下のようになります。期待通り、「ウィキペディア」という出力結果が得られています。

実行結果

PythonでGoogle Chromeを操作しよう!

Raspberry Pi、Docker、seleniumを用いて、PythonによるGoogle Chromeブラウザの操作環境を構築しました。

Dockerを使っているので、ホスト環境に影響しない形式でPythonスクリプトを動かすことができます。

今後、今回構築した環境をベースに、ブラウザで定期的に実行したいコードを実装していこうと思います。

スポンサードリンク



-デバイス
-,