🍓
ラズパイ、Python、seleniumでスクレイピング
実行環境
使用したラズパイのモデルは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
こんにちは
こちらの記事の通り進めて実行して見ましたが・・
ラズパイ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が走らない原因が解りません。
お答え、ご教授頂けますと、幸いです。
お騒がせ致しております
先ほどの実行は、SSH接続したPCのTera Termから
行いました。
結果は上記の通りでした。
今、ラズパイ4BのHDMIポートに繋いでいる
ディスプレイ上でコンソールから
[ seleniym_test.py ]を実行したところ
ブラウザが開き、
グーグル検索から「あいうえお」検索し
「あいうえお - Wikipedia 」などの検索結果の
項目が表示されました。
反応がおもしろいですね。
SSH接続(ヘッドラス運用)でWebラジオを聴取しているのですが
チャンネルの変更はTera Termから出来るので
今回もTera Termから出来るだろうと思っていたのですが
Tera Termからは出来ず、
ラズパイに直に繋いだディスプレイとキーボード・マウスに
依る直のコンソールからの指示で
ディスプレイに「一応」の結果が表示されました。
ラズパイは普段、ヘッドレスで使っているので
ヘッドレス方式で使いたいと思っています。
どこから指示したかで結果が違いました。
WebラジオでJCBA傘下の局を聴きたいのですが
以前のサーバーから聴けなくなり
ブラウザ経由になったので
ブラウザ上の聴取ボタン(プレイボタン)を
seleniumを使いSSH接続で操作したいと
意図しているのですが・・・
上手く出来ません。
途中ステップとして、こちらの記事を参考に
させて戴きました。
ありがとうございました。
記事を閲覧頂きありがとうございます。
おそらく
sudo python /home/pi/selenium1/selenium_test.py
の部分が管理者権限の実行になってますので、sudoを取ってpython /home/pi/selenium1/selenium_test.py
とすれば動くと思われます。申し訳ございませんが、管理者権限での実行方法はわかっていません…
ありがとうございます
その後、進捗がありました。
SSH接続でもseleniumを動かせました。
スクショを撮り、保存するscriptがあったので、実行したら
『スクショが撮れて、保存されていました』
いろいろ勘違いがあったりで
試行錯誤の連続ですが、以前できなかった事が
今日できたので、嬉しいです
これで、かなり前進です。
以前は、コミュニティーFM局はミュージックバードのサーバーから
聴けたのです。
ラズパイにscriptを書き込んで、自由に聴けたのですが
JCBAのポータールサイト経由になり
ブラウザから聴くようになったので
ブラウザを開ける環境なら全く問題はないのですが
ラズパイのscriptで聴こうとすると
ブラウザに埋め込まれたスイッチを操作しなくてはならず・・
seleniumでそういったことができると知り
暫く前から、調べていました。
お陰様で、かなりの前進です。
ありがとうございました