LoginSignup
16
14

More than 5 years have passed since last update.

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

Posted at

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について

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14