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 のパッケージがないので、まず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()を削除する必要がありました。
脚注
- Ubuntu には Chrome のパッケージはありませんが、オープンソース版の Chromium があります。