コンテンツへスキップ

Raspberry PiにSeleniumとchromedriverでブラウザ操作

Seleniumでブラウザ自動操作(スクレイピング)

Raspberry Piでない環境で利用したことのあるSleniumの導入を行いました。
各種WEBツールの自動操作(スクレイピング)などが出来ると、更に自宅IoTの幅が広がると思い、導入してみましたが、「Raspberry Pi 3 Model B+」のCPUが1.2GHz、4コアのBroadcom BCM2837から1.4GHz駆動4コアのBCM2837B0は、32bitでありchromedriverの導入方法が限られ、高い信頼性で動作する状態まで構築出来ておりません。とりあえず動作しますが、信頼性が低いです。(数回に1回は失敗します)

pi@raspberrypi:~ $ cat /proc/cpuinfo
processor	: 0
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 1
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 2
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 3
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

Hardware	: BCM2835
Revision	: a020d3
Serial		: 00000000e63ad038
pi@raspberrypi:~ $ cat /etc/debian_version
10.0
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.19.57-v7+ #1244 SMP Thu Jul 4 18:45:25 BST 2019 armv7l GNU/Linux

Pipでseleniumを導入

root@raspberrypi:~# pip install selenium
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting selenium
Downloading https://files.pythonhosted.org/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904kB)
100% |████████████████████████████████| 911kB 306kB/s
Requirement already satisfied: urllib3 in /usr/lib/python2.7/dist-packages (from selenium) (1.24.1)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
@raspberrypi:~ $ pip list |grep selenium
selenium 3.141.0

chromium-browser導入

sudo apt-get install chromium-browser

Chromedirever導入

  1. オフィシャルサイトよりダウンロード(一番推奨される方法)
    ただし、Linux版は64Bitしか提供されていない。https://sites.google.com/a/chromium.org/chromedriver/downloads
    よって、https://launchpad.net/ubuntu/trusty/+package/chromium-chromedriverよりダウンロードしたドライバを利用します。
    参考URL:Raspberry Piによるスクレイピング 環境構築(Selenium + Chromiumドライバ)
  2. apt sourceを利用したインストール
    参考URL:Raspberry pi3上でChromeのheadlessモードによる小型低電力&自動化環境への第一歩
  3. pipでのインストール
    参考URL:【Python】SeleniumでHeadless Chromeを使おう
  4. npmでのインストール
    sudo npm -g install chromedriver

2. apt sourceでのインストール

chromiumブラウザともバージョンが合い、まだ安定して動作しました。

sudo apt-get install chromium-chromedriver

3. pipでのインストール

あまり安定して動作しませんでした。

root@raspberrypi:~# pip install chromedriver
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting chromedriver
Downloading https://files.pythonhosted.org/packages/c8/5e/1daf3c71852f5b8536e30b2afa1e6442c454e91947678ac1a37daba2d7f5/chromedriver-2.24.1-py2.py3-none-any.whl (14.3MB)
100% |████████████████████████████████| 14.3MB 16kB/s
Installing collected packages: chromedriver
Successfully installed chromedriver-2.24.1
miki@raspberrypi:~ $ pip list |grep chromedriver
chromedriver 2.24.1

Selenium Webdriverの動作確認

以下のスクリプトでheadlessモードでの動作検証を行いました。タイミングにより失敗するケースも有り、IoT家電のメインパスとして利用するにはもう少し試行錯誤が必要かなという状況です。ただし、APIがなくWEBのみに温度など取得したい情報があるツールなどの情報GET系には利用していこうかなと考えております。
それとは、別に設定変更など操作を行うことはもう少し、信頼のおける構築方法が見つかってから導入したいと考えております。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

CHROME_BIN = "/usr/bin/chromium-browser"
CHROME_DRIVER = '/usr/lib/chromium-browser/chromedriver'

options = Options()
options.binary_location = CHROME_BIN
options.add_argument('--headless')

driver = webdriver.Chrome(CHROME_DRIVER, options=options)

driver.get("https://www.google.co.jp")

time.sleep(5)

html = driver.page_source
print(html)
driver.quit()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA