Raspberry Pi でブラウザを自動操作してみる 【Python】

Raspberry Pi

Raspberry Pi でブラウザを自動で動かすための手順についてまとめておきます。
具体的には、Rasperry Pi に selenium をインストールして、Python でネットの自動検索を行ってみます。

以下の環境で動作確認を行っています。
環境: Raspberry Pi (bullseye)

背景

日頃、Python を使って、ブラウザの操作など定型作業の自動化を進めています。
ブラウザの自動操作では、画面操作や入出力など少し複雑なことをしようとすると、selenium が必要になってきます。

これまで、selenium や pyautogui などの自動化ツールは、メインで使っている Windows パソコン上で実行してきました。
ところが、自動操作中は、メインとなるパソコンが取られてしまいます。せっかく自動化をしたとしても、他の作業ができなくなってしまったのでは意味がありません。

ちょうど都合のよいことに、自宅のローカルネットワークには、Raspberry Pi がつながっています。Windows パソコン上で selenium が動くのであれば、本来、そのスクリプトを Raspberry Pi に移植してしまって、あとは指定時刻に自動実行、といきたいところです。
Raspberry Pi で selenium さえ動けば、ネット関連の定型作業は Raspberry Pi 側で自動処理できることになります。メインとなるパソコンは完全にフリーとなり、別の作業に集中できます。同時並行での処理が可能となり、効率が格段に上がることになります。

ネット検索をしてみると、最近の Raspberry Pi bullseye で selenium 4 を動かす手順については情報がまとまったサイトが見当たりませんでした。
そこで、Raspberry Pi に selenium をインストールし、多少試行錯誤してみたところ動くようになりましたので、まずは selenium 導入の設定手順とポイントについてまとめ、公開しておくことにします。

selenium とドライバの設定手順

Raspberry Pi の環境の確認

① まずは、Raspberry Pi の環境について確認をしておきます。ターミナルで以下を順次実行してください。

$ lsb_release -a

→ 一例として、以下のように表示されます。
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
★ コードネームが bullseye 等となっていることが確認できます。

$ python --version

→ Python 3.9.2 等と表示されます。

★ Raspberry Pi の bullseye 以降では、Python 3.9 以降が標準でインストールされています。
★ また、”python2 –version” などを実行すると、コマンドが見つからない旨の表示となっています。bullseye Release 11 以降では、Python 2 は廃止となっているようです。Python 3 と Python 2 の使い分けの煩雑さは、今後は解消されていくようです。
★ なお、最近の Raspberry Pi OS bullseye の SDカードの作成については、下記の関連リンクにまとめています。関心がありましたら参照してみてください。

selenium およびドライバのインストール

② 以下のコマンドを実行し、selenium をインストールします。

$ pip install selenium

③ Raspberry Pi 標準のブラウザ chromium を動かすため、以下でドライバをインストールします。

$ sudo apt install chromium-chromedriver

★ Python などで、ブラウザの少し複雑な操作をしようとすると selenium が必要となり、selenium がブラウザを動かすためにはブラウザに対応したドライバが必要、という関係になっています。

④ 以下を実行し、③のドライバのパスを確認しておきます。

$ which chromedriver

→ /user/bin/chromedriver
★ このパスの情報は、後に Python のスクリプトでドライバの場所を指定する際に必要です。

ブラウザとドライバのバージョン合わせ

⑤ つぎに、以下を実行し、chromium ブラウザのバージョンを更新します。

sudo apt-get dist-upgrade chromium-browser

★ yes/no を聞いてきたら、y と入力します。
★ ③ のドライバ chromium-chromedriver は、ブラウザ chromium とバージョンが対応していないとうまく動きません。そこで、③と⑤を同時期に実行し、ドライバとブラウザのバージョンを揃えておきます。(私の環境では、更新しないと動きませんでした。)

→ これでインストールと更新まで完了です。

参考: ブラウザとドライバのバージョンを確認する

最近は、ブラウザやドライバについても更新が続いています。
バージョンの組み合わせによっては動く/動かないなど、余計な問題が発生します。
そこで、上記のプログラムのバージョンの確認方法についてもまとめておきます。

ブラウザのバージョンを GUI 画面上で確認する方法
(a) Raspberry Pi 画面左上の「Web Browser」をクリックして chromium を起動します。
(b) ブラウザ画面右上の縦3つの点となっているアイコン(「…」が縦に並んでいるアイコン)をクリックし、「設定」→「Chromium について」を順次クリックします。
→ ブラウザのバージョンが表示されます。
バージョン:95.0.4638.78 等となっていると思います。(2022年1月時点)

ブラウザとドライバのバージョンをターミナルで確認する方法
ターミナルで “dpkg -l chromium*” と入力すると表示されます。
私の環境では以下となっています。
chromium-browser         95.0.4638.78-rp5
chromium-chromedriver  95.0.4638.78-rp5
★ ブラウザとドライバで、メジャーバージョン(冒頭の 95 の数値)が一致していれば動作すると思います。

selenium のバージョンの確認方法
selenium のバージョンを確認するには、”pip list | grep selenium” と入力すると表示されます。
例: selenium 4.1.0
★ pip インストールをしたか否かにより、バージョン確認のコマンドが異なっています。②で、selenium を pip コマンドでインストールしているので、”pip list” で確認をしています。
★ selenium についても、最近、仕様の変更が生じているようです。
今後、selenium を使用するにあたり、ネット上のサンプルを参照される場合は、selenium 4 対応かどうかについても留意してみてください。

ブラウザを自動操作してみる

以上で、selenium とドライバの設定は終わりました。そこで、つぎにサンプルを動かしてみます。
⑥ 以下を参考に Raspberry Pi にフォルダ(selenium1)を作成してください。
/home/pi/selenium1/

⑦ ⑥のフォルダにテキストファイルを作成して “web_search1.py” 等の名前に変更し、末尾のスクリプトをコピー&ペーストして保存してください。
★ スクリプト中の path1 としたところで、ドライバのパスを指定しています。もし、④で確認したパスとスクリプト中のパスが一致していない場合は、スクリプトを修正してください。

⑧ 上記のスクリプトを実行してください。

sudo python /home/pi/selenium1/web_search1.py

→ ブラウザ chromium が起動し、google のサイトに飛び、”raspberry pi” の検索キーワードで検索が実行できたら成功です。
10秒経過したら、自動で終了するようにしてあります。

うまく動いたら

うまく動いたら、スクリプトを修正するなどアレンジしてみてください。
ブラウザを自動操作するのに必要な基本設定まではできています。

search_word1 としたところが検索キーワードですので、変更してみてください。
これ以降は、通常の Python のプログラミングになります。selenium の流儀に従ってスクリプトを追加・修正していけば、自由にアレンジできることになります。

まとめ

Raspberry Pi で selenium を設定して動かす手順についてまとめました。
関連するコマンドについても、ひととおり盛り込んだため、説明が長くなりました。

とはいえ、インストール作業としては3つのコマンド程度で終わりです。
自動操作のスクリプトも 20行程度で動き、とてもシンプルです。

これで、Raspberry Pi でのブラウザの操作も自由自在です!

関連リンク
・ 起動用SDカードを設定する 【Raspberry Pi】
・ 
初期設定のまとめ 【OpenCV & Raspberry Pi】
・ pyautogui で特殊文字( : @ ^ )を自動入力したいとき 【Python】
・ Webスクレイピング時のパッケージの使い分け 【requests vs. selenium】
・ ウェブ検索と結果の取得を自動化する【Python】
・ Raspberry Pi でモバイルディスプレイを縦置きにしてみる

サンプルスクリプト

from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service 
from time import sleep 

path1 = '/usr/bin/chromedriver'

options1 = ChromeOptions() 
driver1 = Chrome( service=Service(path1), options=options1 )

url1 = 'https://www.google.com'

search_word1 = "raspberry pi" 

driver1.get( url1 ) 

driver1.implicitly_wait( 5 ) 
elem1 = driver1.find_element(By.NAME, 'q')
elem1.clear()
elem1.send_keys( search_word1 + Keys.ENTER ) 

sleep( 10 ) 

driver1.quit()
タイトルとURLをコピーしました