ぺーぱーふぇいす

雑記と備忘録。私はプログラマ。

【Rasberry Pi】selenium + chromuimでエラーが出る(selenium.common.exceptions.WebDriverException: Message: chrome not reachable)

Raspberry Piseleniumchromiumドライバ)を使ってwebスクレイピングしようと軽くテストコード書いたら、selenium.common.exceptions.WebDriverException: Message: chrome not reachableとか言わた件。

スペック

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux

他、PythonChromiumブラウザとかChromiumドライバ、seleniumのバージョンとか。

$ python --version
Python 3.7.3
$ chromium-browser --version
--disable-quic --enable-tcp-fast-open --ppapi-flash-path=/usr/lib/chromium-browser/libpepflashplayer.so --ppapi-flash-args=enable_stagevideo_auto=0 --ppapi-flash-version=
Chromium 74.0.3729.157 Built on Raspbian , running on Raspbian 10

$ chromedriver --version
ChromeDriver 74.0.3729.157 (7b16107ab85c5364cdcd0b2dea2539a1f2dc327a-refs/branch-heads/3729@{#998})
$ pip3 list | grep "selen"
selene                        1.0.1      
selenium                      3.141.0  

現象

こんな感じでヘッドレスモードでseleniumを使って、サイトのソースを取得したところ(driver.page_source部分)でエラーとなる。

#!/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')
options.add_argument("--no-sandbox")
options.add_argument("--disable-setuid-sandbox")
                                                           
driver = webdriver.Chrome(CHROME_DRIVER, options=options)
 
driver.get("http://example.com")
 
time.sleep(10)
 
html = driver.page_source

print(html)

driver.quit()

エラー内容(末尾抜粋)はこんな感じ。

    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable

対処方法

ドライバにわたすオプションに下記を追加してあげればヨシ。

options.add_argument('--disable-features=VizDisplayCompositor')

原因とか

↓どうやらRasbianのBusterからの問題っぽい。
www.raspberrypi.org

VizDisplayCompositorというのが何なのかよく調べきれていないけど、描画関係の設定っぽい。
ヘッドレスモードだからこそ関係したのかもしれない。

以上。