Python×Selenium Options完全ガイド─headless Chromeを速く・強く・安定化する決定版【2025】

Python × Selenium Options 完全ガイドのアイキャッチ
  • URLをコピーしました!

「オプションが多すぎて、どれを選べば良いのか分からない」
そんな迷子状態に終止符を打ちましょう。本記事では headless Chrome を“速く・強く・安定”させるための厳選フラグを、最新バージョンで検証した結果とともに解説します。

  • 起動時間を最大40 %短縮
  • Bot 検知で止まらないステルス化手法
  • クリックひとつでネットワーク負荷を半減

さらに、DevTools 連携によるHAR 取得や業務別プリセットまで網羅した“逆引きレシピ”形式。
今日からコピー&ペーストで即戦力になるオプションをお届けします。

目次

はじめに — なぜ Options が重要か

Seleniumスクリプトが重い・遅い・ブロックされる——
多くの悩みは、ブラウザ起動時に渡す Options クラス を最適化するだけで解決できます。

この記事はPython 3.12 + Selenium 4.21 を前提に、Chrome/Edge/Firefox で検証した“実際に効いた”設定を整理しました。

Options 基礎 —— 仕組みと書き方

まず理論を固めたい方へ

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

options = Options()
options.add_argument("--headless=new")  # 高速ヘッドレス(Chrome 109+)
options.add_experimental_option("prefs", {
    "profile.managed_default_content_settings.images": 2,
    "profile.managed_default_content_settings.stylesheet": 2,  # CSS 無効
    "credentials_enable_service": False,
})

driver = webdriver.Chrome(options=options)
  • add_argument — --headless などCLIフラグをそのまま渡す。
  • add_experimental_option — 公開されていない内部設定をJSONで注入。

起動高速化フラグ ベスト 10(安全版)

フラグ効果 / 注意点
--headless=newGUI を完全に省き 20〜40 % 短縮。Chrome 109 以降で安定。
--disable-dev-shm-usageDocker/LXC で /dev/shm が小さい環境のクラッシュ防止。ローカルでは不要。
--no-sandboxルート実行の CI 専用。ローカルでは付けない
--blink-settings=imagesEnabled=false画像ロードを無効化し帯域節約。UI テストでは注意。
--font-render-hinting=noneフォント描画を簡略化しメモリ削減。
--remote-debugging-port=0ランダムポートを割当てデバッグ機能を有効化。複数コンテナでのポート公開に留意。
--disable-gpu旧式ヘッドレス向け。新ヘッドレスでは効果小。古い CI との互換用に掲載。
--disk-cache-dir=/dev/nullディスク I/O を減らすが Service Worker が壊れやすい。E2E 専用
--log-level=3INFO 以下のログを抑制し若干高速化。
~~--single-process~~非推奨:Chromium 118+ では高頻度でクラッシュ。除外推奨。

上位 4 つのみ先に試し、効果と安定性を確認してから残りを追加してください。

自宅に “爆速 CI” を

ネットワーク制御 — 余分な通信を断つ

Preferences で広告・画像・CSS をブロック

prefs = {
    "profile.managed_default_content_settings": {
        "images": 2,            # 0: 許可 / 2: ブロック
        "stylesheet": 2,        # CSS
        "cookies": 2,
    },
    "profile.default_content_setting_values.notifications": 2,
}
options.add_experimental_option("prefs", prefs)

DevTools Protocol でドメイン指定ブロック

from selenium.webdriver.common.devtools.v120 import network

driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setBlockedURLs", {
    "urls": [
        "*://ads.example.com/*",
        "*doubleclick.net/*",
    ]
})
  • SaaS ダッシュボードの広告を遮断すると描画速度が向上。
  • HAR 取得前にブロックすればログもクリーン。

ステルス化 — Bot 検知を回避する設定

対策実装例 / 補足
navigator.webdriver 隠蔽--disable-blink-features=AutomationControlled Cloudflare Turnstile 等の最新 CAPTCHA には通用しない場合あり。
ユーザーエージェント偽装options.add_argument("--user-agent='Mozilla/5.0 …'")
ウィンドウサイズ乱数化driver.set_window_size(randint(1280,1440), randint(720,900))
人間風操作ActionChains で入力間隔にランダムディレイ (0.1–0.3 秒)

注意: 利用規約で自動操作を禁じているサイトには適用しないでください。

プロキシ & セキュリティ

from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = "proxy.example.jp:8080"
proxy.ssl_proxy  = "proxy.example.jp:8080"
proxy.add_to_capabilities(options.to_capabilities())
  • 認証付きプロキシは user:pass@host:port 形式より、IP 制限 + 無認証 に切替えると安定。
  • 自己署名証明書は --ignore-certificate-errors で一時的に回避し、本番では削除。

DevTools 連携 — HAR 取得とパフォーマンス計測

# Web Vitals を取得
from selenium.common import WebDriverException

driver.execute_cdp_cmd("Performance.enable", {})
metrics = driver.execute_cdp_cmd("Performance.getMetrics", {})

# バージョン差異を吸収
values = {m["name"]: m["value"] for m in metrics["metrics"]}
LCP = values.get("LargestContentfulPaint") or values.get("LargestContentfulPaintCandidate")
print("LCP:", LCP)
  • Chrome バージョンでメトリクス名が変わるため、キー存在チェック を推奨。
  • HAR を出力し Datadog Synthetic や Elastic Stack で可視化可能。

省電力テストノードに最適

ブラウザ別逆引きリスト

用途Chrome / Edge (Chromium)FirefoxSafari
ヘッドレス--headless=new-headless正式版 17 では非対応Tech Preview のみ実験的 API
画像ブロックPrefs images:2permissions.default.image=2非対応
サンドボックス解除--no-sandbox (CI 専用)
アドブロックCDP Network.setBlockedURLsabout:config
DevTools ログ--remote-debugging-port=0moz:firefoxOptionslogWeb Inspector

Safari は macOS 専用。クロスブラウザ検証には BrowserStack などを活用。

業務別プリセット早見表

シーン推奨フラグ(一部)
CI / CD (Docker)--headless=new, --disable-dev-shm-usage, --no-sandbox, --window-size=1366,768
CI / CD (ローカル)--headless=new, --window-size=1366,768
経理 RPAPrefs 画像・CSS ブロック, --disable-blink-features=AutomationControlled, プロキシ設定
社内セキュアツール--proxy-server, --ignore-certificate-errors=false, --disable-extensions
広告計測 / APMCDP Network.enable, Performance.enable, HAR 生成, UA 固定

まとめ — オプションを制する者は自動化を制す

  • Options = パフォーマンスと信頼性の心臓部。まず高速化フラグを計測し、次にネットワーク制御・ステルス化を追加する順が安全。
  • 旧式・環境依存フラグ(--disable-gpu / --single-process など)は慎重に。最新 Chrome では逆効果も。
  • DevTools 連携まで押さえれば E2E テストと性能監視を一本化 でき保守コストが下がります。
  • 共通モジュール options_factory.py にまとめ、プロジェクト横断で使い回すと管理が楽になります。

“効く” 一行を加えて、速く静かに動くブラウザを体験してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

当ブログの運営者であり全ての記事を書いた陰の者。
なんでも好きなものだけ書きます。
X(旧Twitter)でも更新情報とたまにくだらないことを発信中。
コメント解放しておりませんので、Xの方で感想いただけると嬉しくて更新が早くなる傾向にあります。調子乗りです。

目次