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

Raspberry Pi

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

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

背景

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

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

ちょうど都合のよいことに、私が使っているローカルネットワークには、Raspberry Pi がつながっています。Windows パソコン上で Python や 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 等となっていることが確認できます。bullseye、buster あたり以降であれば、特に問題なく selenium が動くと思います。

$ python --version

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

★ Raspberry Pi の bullseye 以降では、Python 3.9 以降が標準でインストールされています。
数年前は Python 2 なども混在し、動く/動かないなどの状況が生じていましたが、Python 3.9 程度以降であれば、最近の selenium も動くと思います。
★ なお、Raspberry Pi の起動用の SDカードの作成については、下記の関連リンクにまとめています。環境を刷新する等、関心があるようでしたら参照してみてください。

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

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

$ pip install selenium

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

$ sudo apt install chromium-chromedriver

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

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

$ which chromedriver

→ /usr/bin/chromedriver

★ このパスの情報は、Python のスクリプト(以下の⑦)でドライバの場所を指定する際に必要です。

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

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

sudo apt-get dist-upgrade chromium-browser

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

→ これで selenium のインストールとブラウザのバージョン合わせまで完了です。

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

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

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

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

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

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

以上で、selenium とドライバの設定は終わりました。
そこで、つぎに 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 でのブラウザの操作も自由自在です!
selenium が動いたら、ウェブサイトのスクリーンショットの自動化なども可能です。
もし興味があるようでしたら、関連リンクなども参照してみてください。いきなり、応用編とはなりますが。。)

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

外部リンク [PR] 

・ Raspberry Pi 5 (8GB RAM) 技適対応品
・ Raspberry Pi 5 8GB 技適対応品/アクティブクーラー
・ Raspberry Pi 5用 27W USB-C PD(電源アダプタ)
・ 
Raspberry Pi 4 Model B 8GB

サンプルスクリプト web_search1.py

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をコピーしました