Google Chrome 59のHeadlessモードを使ってみる


Headless modeを内蔵したGoogle Chrome 59がリリースされたので、Python + Seleniumで使ってみました。

これまでheadlessと言えば、Xvfbを使って仮想的なディスプレイに作画することで実現していました。しかしGoogle Chrome 59以降ではChrome自体にheadless modeが内蔵され、Xvfbを使わなくてもディスプレイを持たないCLI環境でWebページのテストなどをできるようになりました。

そこでUbuntu 17.04上でGoogle ChromeのHeadlessモードを試してみました。

Chromeをインストール

Ubuntu 17.04にはChromeのパッケージがない1ので、まずChromeのダウンロードページからdebパッケージをダウンロードします。

Chromeはいくつか依存パッケージがあるので、それらのパッケージをインストールした後にdpkgコマンドでインストールします。

$ sudo apt install libappindicator1 libindicator7
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ which google-chrome-stable
/usr/bin/google-chrome-stable

Seleniumとchromedriverをインストール

Seleniumは問題ありませんが、Ubuntu 17.04にあるchromedriveはChrome 59をサポートしていません。そこで最新のChromeDriverをダウインロードしてインストールします。

$ sudo apt install python3-selenium
$ cd ~/bin
$ unzip ~/Download/chromedriver_linux64.zip
$ ./chromedriver -v
ChromeDriver 2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57)

Headless modeを試してみる。

Pythonで次のようなスクリプトを書いて、Chromeをheadless modeで使えるか試してみました。

#!/usr/bin/python3

import os

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

CHROME_BIN = "/usr/bin/google-chrome-stable"
CHROME_DRIVER = os.path.expanduser('~/bin/chromedriver')

options = Options()
options.binary_location = CHROME_BIN
options.add_argument('--headless')
#options.add_argument('--remote-debugging-port=9222')

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

#driver.get("chrome://settings/help")
#driver.save_screenshot("/tmp/help.png")
driver.get("https://www.yahoo.co.jp")
driver.save_screenshot("/tmp/yahoo.png")
print(driver.title)
driver.quit()

このスクリプトを実行してYahoo!のページタイトルYahoo! JAPANとスクリーンショットが作成されていれば成功です。

画面のサイズ指定ができない

これまでWindowsサイズをset_window_size()で指定していましたが、これがあると次のようなエラーを引き起こします。

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
  (Session info: headless chrome=59.0.3071.86)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.10.0-21-generic x86_64)

解決策がないかとググってChromeDriver error “unknown error: cannot get automation extension”を見つけたのですが、私の環境では

options.add_argument("disable-extensions");
options.add_argument("--start-maximized");

というオプションを追加しても解決せず、set_window_size()を削除する必要がありました。

脚注

  1. UbuntuにはChromeのパッケージはありませんが、オープンソース版のChromiumがあります。 


コメントを残す

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