【Rasberry Pi】selenium + chromuimでエラーが出る(selenium.common.exceptions.WebDriverException: Message: chrome not reachable)
Raspberry Piでselenium(chromiumドライバ)を使って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
他、Python、Chromiumブラウザとか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
というのが何なのかよく調べきれていないけど、描画関係の設定っぽい。
ヘッドレスモードだからこそ関係したのかもしれない。
以上。