Selenium 4でheadless(ヘッドレス)に対応する

Selenium 4でheadless(ヘッドレス)に対応する プログラミング

Selenium 4では、headless(ヘッドレス)モードの指定方法が変わりました。
そのため、Selenium 3までの書き方が通用しません。

本記事の内容

  • Seleniumにおけるheadless(ヘッドレス)モードとは?
  • Selenium 4でheadless(ヘッドレス)モードを有効にする方法
  • 【動作確認】Selenium 4における画面のスクリーンショット撮影

それでは、上記に沿って解説していきます。

Seleniumにおけるheadless(ヘッドレス)モードとは?

headless(ヘッドレス)とは、ブラウザが表示されないということです。
表示されないだけで起動はしています。

デフォルトでSeleniumを起動すると、ブラウザが実際に立ち上がります。
動きが実際に確認できるので、プラスの面は存在しています。

しかし、画面が出てほしくないケースも存在します。

  • バッチ処理としてSeleniumを動かす
  • サーバー(GUIがない)でSeleniumを動かす
  • 単純に画面が出てウザい

このようなケースでは、headless(ヘッドレス)モードが活躍します。
Seleniumに慣れてくれば、ほとんどがheadless(ヘッドレス)モードで動かすことになります。

以上、Seleniumにおけるheadless(ヘッドレス)モードについて説明しました。
次は、Selenium 4でheadless(ヘッドレス)モードを有効にする方法を解説します。

Selenium 4でheadless(ヘッドレス)モードを有効にする方法

比較してみましょう。

Selenium 3

options = Options()
options.add_argument('--headless')

Selenium 4

options = Options()
options.headless = True

これだけを見ると、add_argumentが廃止になったと思いませんか?
しかし、add_argumentはSelenium 4でも有効です。

実際、他の設定はadd_argumentを利用します。
例えば、シークレットモードを指定する場合は次のように記述できます。

options.add_argument('incognito')

だから、add_argumentが廃止になった訳ではありません。
それよりも、headless(ヘッドレス)モードの格上げということだと思います。

headless(ヘッドレス)モードは、Seleniumではなくてはならない設定です。
そのため、他のオプションとは一線を引く意図だと捉えています。

まあ、本当のところはわかりませんけどね。
とにかく、Selenium 4では記述方法が変わりました。

以上、Selenium 4でheadless(ヘッドレス)モードを有効にする方法の説明でした。
次は、動作確認のためにheadless(ヘッドレス)モードでスクショを撮影します。

【動作確認】Selenium 4における画面のスクリーンショット撮影

ここでは、実際に動作確認用のコードを載せています。
このコードを動かすためには、Seleniumのインストールが必須です。

Seleniumのインストールがまだ場合は、次の記事を参考にしてください。

ただ、上記はSelenium 3をベースに書かれています。
上記記事をもとにした場合、警告が出てしまいます。

この警告は、Selenium 4になって変わったところと言えます。
その警告を消すための方法は、以下の記事で説明しています。

Selenium 4で警告なしで起動できるようになりましたか?
そのように起動できた前提で話を進めます。


では、headless(ヘッドレス)モードの動作確認を行いましょう。
動作確認用のコードは、以下。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs

CHROMEDRIVER = "chromedriverのパス"
URL = "https://example.com/"

# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=CHROMEDRIVER)

options = Options()
options.add_argument(f'service={chrome_service}')
# ブラウザを表示しない
options.headless = True

driver = webdriver.Chrome(options=options)

# ウィンドウサイズ=画像サイズ
driver.set_window_size(1024, 768)
# 対象ページへアクセス
driver.get(URL)
# スクリーンショットを取得
driver.save_screenshot('result.png')

driver.quit()

上記を実行すると、ブラウザが表示されずにスクショが撮影できます。
処理が終わったら、同じディレクトリ上に「result.jpg」があるはずです。

追記 2022年10月17日
上記コードはSelenium 4が出始めた当初は有効でした。
しかし、selenium 4.5.0では動きません。
以下のように該当箇所を変更すれば、動くようになります。

options = Options()
# ブラウザを表示しない
options.headless = True

driver = webdriver.Chrome(service=chrome_service, options=options)

追記 2023年10月22日
ヘッドレスモードの設定方法が変わったようです。
https://www.selenium.dev/blog/2023/headless-is-going-away/
上記部分を次のように変更すればヘッドレスモードになります。

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(service=chrome_service, options=options)

result.jpg

Seleniumを使ったスクリーンショットの撮影は、次の記事でまとめています。

詳細を知りたい場合は、上記の記事をご覧ください。
ただし、Selenium 3ベースのコードであることには注意です。

以上、Selenium 4でheadless(ヘッドレス)に対応する方法を説明しました。

タイトルとURLをコピーしました