Python
Chrome
Selenium

PythonでChromeのヘッドレスブラウザを利用してみた。

More than 1 year has passed since last update.

VXFD 仮想ヘッドレスト、Chrome Headless の違い。

ブラウザ操作の自動化を行うのにLinux Server上でSeleniumでChromeを動かしたい!ってことで メモ書き。

今までの方法としてはVXFDを利用して、仮想ディスプレイ上でSeleniumを利用してChromeを操作するといのが一般的?だった。

環境構築は割愛・・・。

※Sampleなので、べた書きなのはご愛嬌

VXFD利用

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

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()

browser_path = '/usr/bin/google-chrome-stable'
opts = Options()
opts.binary_location = browser_path
opts.add_argument('--no-sandbox')
browser = webdriver.Chrome(chrome_options=opts)

browser.get('http://www9.plala.or.jp/oyoyon/html/script/newwin.html')
print(browser.title)

ele = browser.find_element_by_css_selector('a.under')
ele.click()

for Handle in browser.window_handles :
    if Handle != browser.current_window_handle :
        browser.switch_to_window(Handle)

print(browser.title)
print(browser.find_element_by_css_selector("p").text)

browser.quit()
display.stop()

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()

このような感じで仮想ディスプレイを立ち上げる必要があった。

Chrome Headless を利用すると。。。

VXFD周りのコードを省いて、Chromeのオプションを追加するだけ。

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

browser_path = '/usr/bin/google-chrome-stable'

opts = Options()
opts.binary_location = browser_path
opts.add_argument('--headless')
opts.add_argument('--disable-gpu')
opts.add_argument('--no-sandbox')

browser = webdriver.Chrome(chrome_options=opts)

browser.get('http://www9.plala.or.jp/oyoyon/html/script/newwin.html')
print(browser.title)

ele = browser.find_element_by_css_selector('a.under')
ele.click()

for Handle in browser.window_handles :
    if Handle != browser.current_window_handle :
        browser.switch_to_window(Handle)

print(browser.title)
print(browser.find_element_by_css_selector("p").text)

browser.quit()

option.add_argument('--headless')
option.add_argument('--disable-gpu')

ここがミソ。になる。割りと移行も簡単にできると思われる。
ソースコードのみで言うと大したインパクトはないんですがね。。。

メリット

  • 環境構築でVXFD入れたりすると、Dockerのコンテナが肥大化するーということも軽減する。
  • Windows・Mac環境で手元で開発するのに仮想ディスプレイを立ち上げるかどうかの制御も不要。
  • 仮想ディスプレイを立ち上げるオーバーヘッドがなくなる。

Headlessブラウザとして有名なPhantomJSはChromeのヘッドレスのリリースによって、開発の終了を宣言している。
最近は FireFoxもHeadlessをサポートし始めているので
近々に試してみることにする。

google headlessについて