🍓

ラズパイ、Python、seleniumでスクレイピング

2022/07/23に公開
4

実行環境

使用したラズパイのモデルは3B+です。

uname -a

出力
Linux ホスト名 5.15.61-v8+ #1579 SMP PREEMPT Fri Aug 26 11:16:44 BST 2022 aarch64 GNU/Linux

python3 -V

出力
Python 3.9.2

chromium-browser --version

出力
Chromium 104.0.5112.105 Built on Debian , running on Debian 11

seleniumのインストール

aptを使う場合

sudo apt install python3-selenium

pipを使う場合

pip install selenium

seleniumのバージョン確認

python3を実行し、以下のように入力する。今回の場合4.5.0であることが確認できた。
Ctrl+Dで抜ける。

python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import selenium
>>> selenium.__version__
'4.5.0'
>>> 

Chromiumドライバのインストール

sudo apt install chromium-chromedriver

バージョン確認

chromedriver --version

出力
ChromeDriver 104.0.5112.105 (f41489f8f9695e9da8b096b700413afb03204129-refs/branch-heads/5112@{#1482})

雑なサンプルコード

googleの検索ボックスで「あいうえお」と検索し、Wikipediaに飛んで「あいうえお」
の説明を表示するプログラム。

selenium_test.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import WebDriverException

CHROMEDRIVER = "/usr/lib/chromium-browser/chromedriver"
CHROME_SERVICE = fs.Service(executable_path=CHROMEDRIVER)

try:
    # GUIが使える場合
    browser = webdriver.Chrome(service=CHROME_SERVICE)
except WebDriverException:
    # GUIが使えない場合
    options = Options()
    options.add_argument("--headless")
    browser = webdriver.Chrome(service=CHROME_SERVICE, options=options)

browser.get("https://www.google.com/")

q = browser.find_element(By.NAME, "q")
q.send_keys("あいうえお\n")

time.sleep(0.1)
element_list = browser.find_elements(By.CLASS_NAME, "LC20lb.MBeuO.DKV0Md")
for el in element_list:
    if "Wikipedia" in el.get_attribute("innerText"):
        el.click()
        break

time.sleep(0.1)
element_list = browser.find_elements(By.CLASS_NAME, "mw-parser-output")
for el in element_list:
    print(el.get_attribute("innerText"))

time.sleep(1)
browser.quit()

以下のように出力されれば成功…?

出力
あいうえお、アイウエオとは、五十音のこと。またその中のあ行のこと。日本語の母音。

Discussion

tonkatutonkatu

こんにちは
こちらの記事の通り進めて実行して見ましたが・・
ラズパイ4Bから以下のお返事を頂きました。
====
$ sudo python /home/pi/selenium1/selenium_test.py
Traceback (most recent call last):
File "/home/pi/selenium1/selenium_test.py", line 5, in <module>
from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'
===
seleniumが無いよって言ってる様です?
===
$ pip list
Package Version
selenium 4.3.0
====
と、お尋ねすると、installリストには在るようですが。

実は、他のWebの記事も参考にしてやって観ましたが
同様のNo module named 'selenium'エラーメッセージでした。
クロームのドライバとクロームの Ver.は合っています。
ドライバの位置も問題ないと思われますが
初心者で、scriptが走らない原因が解りません。

お答え、ご教授頂けますと、幸いです。

tonkatutonkatu

お騒がせ致しております

先ほどの実行は、SSH接続したPCのTera Termから
行いました。
結果は上記の通りでした。

今、ラズパイ4BのHDMIポートに繋いでいる
ディスプレイ上でコンソールから
[ seleniym_test.py ]を実行したところ

ブラウザが開き、
グーグル検索から「あいうえお」検索し
「あいうえお - Wikipedia 」などの検索結果の
項目が表示されました。

反応がおもしろいですね。
SSH接続(ヘッドラス運用)でWebラジオを聴取しているのですが
チャンネルの変更はTera Termから出来るので
今回もTera Termから出来るだろうと思っていたのですが
Tera Termからは出来ず、
ラズパイに直に繋いだディスプレイとキーボード・マウスに
依る直のコンソールからの指示で
ディスプレイに「一応」の結果が表示されました。

ラズパイは普段、ヘッドレスで使っているので
ヘッドレス方式で使いたいと思っています。

どこから指示したかで結果が違いました。

WebラジオでJCBA傘下の局を聴きたいのですが
以前のサーバーから聴けなくなり
ブラウザ経由になったので
ブラウザ上の聴取ボタン(プレイボタン)を
seleniumを使いSSH接続で操作したいと
意図しているのですが・・・
上手く出来ません。

途中ステップとして、こちらの記事を参考に
させて戴きました。

ありがとうございました。

dasonodasono

記事を閲覧頂きありがとうございます。

おそらくsudo python /home/pi/selenium1/selenium_test.pyの部分が管理者権限の実行になってますので、sudoを取ってpython /home/pi/selenium1/selenium_test.pyとすれば動くと思われます。
申し訳ございませんが、管理者権限での実行方法はわかっていません…

tonkatutonkatu

ありがとうございます
その後、進捗がありました。

SSH接続でもseleniumを動かせました。
スクショを撮り、保存するscriptがあったので、実行したら
『スクショが撮れて、保存されていました』

いろいろ勘違いがあったりで
試行錯誤の連続ですが、以前できなかった事が
今日できたので、嬉しいです

これで、かなり前進です。

以前は、コミュニティーFM局はミュージックバードのサーバーから
聴けたのです。
ラズパイにscriptを書き込んで、自由に聴けたのですが
JCBAのポータールサイト経由になり
ブラウザから聴くようになったので
ブラウザを開ける環境なら全く問題はないのですが
ラズパイのscriptで聴こうとすると
ブラウザに埋め込まれたスイッチを操作しなくてはならず・・
seleniumでそういったことができると知り
暫く前から、調べていました。

お陰様で、かなりの前進です。

ありがとうございました