【電力不足?】Raspberry Pi 3B+でselenium使ってスクレイピングするまでの手順【忘備録】
最近疲れてここの文章考える気力ないので省略
その代わり、かわいいハムちゃんの画像でも載っけときますね。
ちなみに全然関係ない話すると、最近読んで面白かった本は
野矢 茂樹氏の「はじめて考えるときのように 」です。おすすめ。
はい、本題。色々ハマったので、久しぶりの忘備録です。
SSHとRDPを使えるようにする
使えるようにしておくと色々楽。# SSH
- Raspberry Piの設定
# RDP
$ sudo apt-get install xrdp
必要なソフトを入れて環境を整える
ターミナルからSSHでつないで以下コピペ# パッケージのアップデート
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
# 2020-02-13-raspbian-buster.img を # クリーンインストールした場合、なぜか起動するとハングアップして死ぬので # 再インストールで対処する # 一度きれいに削除 $ sudo apt-get remove chromium-browser $ sudo apt-get remove chromium $ sudo apt-get autoremove $ sudo apt-get clean
# chromium のインストール $ sudo apt-get install chromium-browser # chromedriver のインストール $ sudo apt-get install chromium-chromedriver # バージョンがあっているか確認 $ chromium-browser --version Chromium 78.0.3904.108 $ chromedriver --version ChromeDriver 78.0.3904.108 # selenium のインストール # 今回はPython3で動かすのでpip3 $ sudo pip3 install selenium
適当にPythonのコードを書く
Googleで"test"と検索するコード#!/usr/bin/python3 # coding:utf-8 import sys import os sys.path.append('/usr/bin/python3') import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.binary_location = '/usr/bin/chromium-browser' browser = webdriver.Chrome(executable_path='/usr/bin/chromedriver',options=chrome_options) URL = 'https://www.google.com/' INPUT = '//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input' WORD = 'test' if __name__ == '__main__': browser.get(URL) time.sleep(3) Field = browser.find_element_by_xpath(INPUT) Field.click() Field.send_keys(WORD) Field.send_keys(Keys.RETURN)
問題なく動けばゲームクリアです。
消費電力にも注意
私の環境だとこれプラス、電力供給に不備がありハングアップしていた場面もありました2個目ってこともあり、スターターセットではない本体単体を購入して裸で
尚且、SSDブート化させた上に、そこらへんに転がってたケーブルとACアダプタで繋いでただけですからね・・・
しっかりしたUSBケーブルとACアダプタは用意しといたほういいです(笑)
end Kernel Panic – not syncing: VFS: Unable to mount root fs on unknown-block(179,7)
赤いパワーランプが常時点灯している場合は要注意最悪システムファイルぶっ壊れて起動しなくなります。
SD起動でもKernel Panic起きてしまったので、より消費電力の大きいSSD起動はさらにシビア
エラー忘備録
2020年5月14日現在、上をコピペしていれば起きないだろう(ことを願う)けど一応、試行錯誤して設定していた時に起きたエラーと対処をまとめる
そもそも固まって操作を受け付けない
chromiumを開くとハングアップする
chromiumが悪さしている感じがしたので、一度完全にアンインストールその後、再インストール
手順の最初に書いたコードを参照
それでも動かない場合
- 電力不足が考えられる場合(これ見落としがち)
- 電源やケーブルの交換
- パッケージが古い
- アップデート
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get dist-upgrade
No module named 'selenium'
パスが通っていない。# よくある凡ミス # sudo をつけずにインストールしていた $ pip3 install selenium # Python3用で入れていなかった $ sudo pip install selenium
unknown error: DevToolsActivePort file doesn't exist
直やRDPでは正常に動作するのに、SSHやcronではエラーが出る
今回このエラーが出たのは、コードを定期実行させたくcronに登録しようとした時のことまぁ、色々試したがエラーは消せなかった。
状況から分かったのは、GUI環境が立ち上がっていて実行すればエラーは起きない
GUIに依存するエラーだとは思う
・・・が、本質的な解決策は見つけられなかった
個人的解決策
実際に動かしているコードは、特定のサイト上を定期的に巡回さえすればいいのでPythonのscheduleモジュールで実装した
$ sudo pip3 install schedule
試したこと
以下の設定には効果はないが、忘備録として残す。# 実行ファイルのchromeオプションに色々指定
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_experimental_option('useAutomationExtension', False)
# ssh接続時にX11 Forwardingを有効にしてみる
## ラズパイ側の設定
$ sudo nano /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
# cronに設定時にフルパスで指定、環境変数も指定
ハムスター癒やされる。
トラブったり、なんやかんやでイライラした時は可愛いものみて癒やされましょう。以上、@chiroru_27 でした。