SeleniumでChromeを起動する前に指定するOptionsとServiceについて、おすすめを目的別にまとめました、Optionsはバージョンアップとともに変わったりするので不定期に更新していきます、2026年6月時点での最新版です
前置き
特にOptionsは動作軽量を目指す機能も多いのですが、スクレイピングはなるべく人が操作している状態を再現したほうが安定するので、なるべく使わない方がいいが持論です
プロファイルを指定しなければ毎回、何も設定していないインストール直後のピュアな状態で起動するはずなので、その前提で必要な機能だけ選んでいけばいいと思います
Optionsについて
いわゆる起動オプションとして、Chromeの機能を設定できます、あくまでChrome用の機能なので「ChromeDriverとして要る?」と思うものもありますが、目的別に分類したので気になるところからチェックしてみてください
記述はoptions.add_argument(argument: str)で、必要な分だけ書いていきます、評価はあくまで個人的なものなので、お好みで取捨選択してください
数は多いですが全部覚える必要はありません、迷ったら後半の結局何を使うべきかのテンプレが基本で、中でもBot検知対策の--disable-blink-features=AutomationControlledは入れておくと安定します
高速化・軽量化目的
| オプション | 効果 | 評価 |
|---|---|---|
| --headless=new | 画面を表示せず(headless)起動、バックグラウンド処理向き | 一番需要あり、ただしエラーに気づきにくい/サイトによっては弾かれることも(昔の--headlessでなく今は=new) |
| --disable-gpu | GPU処理を無効化 | 昔の名残、新しいheadless(Chrome 109以降)ではほぼ不要、自分は付けない |
| --disable-extensions | 拡張機能を無効化して起動 | そもそも拡張なしが基本なのであってもなくても |
| --disable-dev-shm-usage | Linux/Dockerで共有メモリを避けクラッシュ防止 | Windowsなら不要、おまじない枠 |
| --no-sandbox | サンドボックス(セキュリティ)を無効化 | Linuxで必要なことはあるが基本は付けない方がいい |
テスト・自動化向け
| オプション | 効果 | 評価 |
|---|---|---|
| --start-maximized | ウィンドウを最大化して起動 | 個人的に必須級、小さいと要素が表示されないことがある |
| --window-size=幅,高さ | ウィンドウサイズを指定して起動 | --start-maximized推奨だがこちらでもOK |
| --disable-popup-blocking | ポップアップブロックを無効化 | 既定でブロックされないはずなので不要 |
| --disable-notifications | 通知を無効化 | 通知を受ける操作はしないのであってもなくても |
| --auto-open-devtools-for-tabs | 起動時にDevToolsを自動表示 | 完成品には不要、開発は普通のChromeでやるはず |
| --disable-blink-features=AutomationControlled | navigator.webdriverを偽装して自動化検知を回避 | Bot検知対策の基本、まず入れておきたい(ただし単体では不十分=後述) |
2026年はこの手の基本フラグだけではほぼ見抜かれます、ChromeDriverが残すcdc_から始まる変数やCDP(DevTools Protocol)の痕跡、ヘッドレス特有のUA(HeadlessChrome)など、チェックされるポイントは増える一方です、本気で検知を避けたいならundetected-chromedriverのような専用ツールや、痕跡をまとめて潰す対策が前提になります
プライバシー・偽装目的
| オプション | 効果 | 評価 |
|---|---|---|
| --incognito | シークレットモードで起動 | 毎回ピュアな状態なのでおまじない枠 |
| --user-agent=任意のUA | ユーザーエージェントを偽装 | requestsならともかくSeleniumで効果あるか疑問、UA文字列はfake-useragentが便利 |
| --user-data-dir=プロファイルのパス | ユーザープロファイルを指定して起動 | cookieなども残せて幅が広がる(プロファイルの詳細は割愛) |
| --ignore-certificate-errors | SSL証明書のエラーを無視 | 自己署名サイト等、使う機会は少なく不要でOK |
| --disable-password-manager | パスワード保存を無効化 | 保存させる場面がないので不要 |
表示・UI制御
| オプション | 効果 | 評価 |
|---|---|---|
| --hide-scrollbars | スクロールバーを非表示 | スクショを残すときくらい、お好みで |
| --app=URL | 指定したURLをアプリモードで起動 | 手動操作しないので使う機会はなさそう |
| --disable-images | 画像の読み込みを無効化 | 古い指定、headlessだと効かないことがある |
| --blink-settings=imagesEnabled=false | 画像の読み込みを無効化(より確実) | headlessでも効く、画像を止めて高速化したいなら今はこちら |
| --disable-javascript | JavaScriptを無効化 | JS無効で動くサイトは少ない、JS不要ならrequestsが軽い、今は後述のprefs推奨 |
このほか、どうしても読み込みたいローカル拡張があれば--load-extension=拡張のパスもありますが、拡張を使うなら個人的には--user-data-dir派です
実験的・高度な制御(add_experimental_option)
ここからはoptions.add_argumentではなくoptions.add_experimental_option(name: str, value)で設定する実験的オプションです、記述の形が変わる点に注意してください
| オプション | 効果 | 評価 |
|---|---|---|
| “excludeSwitches”, [“enable-automation”] | 「Chromeは自動テストソフトウェアによって制御されています」のメッセージを非表示 | Bot検知回避の一つ、設定し得 |
| “useAutomationExtension”, False | navigator.webdriverをundefinedに近づける(Bot検知回避) | ★現在は非推奨、Chromeが使わなくなったのでexcludeSwitchesだけでOK |
| “mobileEmulation”, {“deviceName”: deviceName} | スマホとしてブラウザを起動 | deviceNameに”iPhone 14 Pro Max”や”Pixel 7″など、DevToolsのデバイス一覧が参考 |
| “prefs”, {dict} | 環境設定(preferences)をまとめて指定 | オプションと同じ内容ならこちらが推奨 |
excludeSwitchesを設定すると、↓のメッセージが消えます

prefs(preferences)で指定できる主なもの
prefsの中身も多いので、よく使うものを表にまとめました、値は例なので環境に合わせて書き換えてください
| キー | 効果 |
|---|---|
| “download.default_directory”: “保存先のパス” | ダウンロード先を指定 |
| “download.prompt_for_download”: False | ダウンロード時の確認ダイアログを無効化 |
| “download.directory_upgrade”: True | 既存フォルダでも強制的に保存 |
| “download_bubble.partial_view_enabled”: False | ダウンロードの吹き出し通知(部分表示)を無効化 |
| “savefile.default_directory”: “保存先のパス” | 「名前を付けて保存」ダイアログの初期ディレクトリを指定 |
| “credentials_enable_service”: False | パスワード保存のポップアップを無効化 |
| “plugins.always_open_pdf_externally”: True | Chrome内蔵のPDFビューアを使わない |
| “profile.managed_default_content_settings.javascript”: 2 | JavaScriptの有効(1)/無効(2)を制御 |
| “profile.managed_default_content_settings.images”: 2 | 画像読み込みの有効(1)/無効(2)を制御 |
Serviceについて
今のServiceは特に指定しなくてもいいレベルで、個人的に使うのは1つだけです
creation_flags
creation_flagsを指定すると、ChromeDriverの黒いコンソールウィンドウを非表示にできます
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from subprocess import CREATE_NO_WINDOW
# Serviceオブジェクトを作成
service = Service()
service.creation_flags = CREATE_NO_WINDOW
service.creation_flags = 0x08000000 # CREATE_NO_WINDOWインポートしていない場合
# Serviceを渡してWebDriverを起動
driver = webdriver.Chrome(service=service)
# これ以降の処理...
driver.get('https://www.google.com')
print(driver.title)
driver.quit()実行方法によりますが、VSCodeなどで実行したときは↓のメッセージが表示されなくなります
DevTools listening on ws://127.0.0.1:50152/devtools/browser/~PyInstallerでアプリ化したときなんかは余計なメッセージが出なくてすっきりする気もしますが、その場合はおそらく--noconsoleオプションを付けることが多いので、おまじない的な位置づけでしょうか
余談(executable_pathが不要になった件)
その昔、chromedriverをChromeに合わせたバージョンに入れ替えていた時代がありまして、webdriver-managerが自動で入れ替えてくれるのでexecutable_pathと組み合わせて使っていました(当時はかなり画期的なモジュールでした)
が、Selenium v4.6.0からはSelenium Managerが機能として実装され、自動でWebDriverを管理してくれるので今は不要です、ネットには今でもこの方法を紹介しているページが残っていますが、無視して大丈夫です
# webdriver_managerを使っていた頃の起動
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# Serviceオブジェクトを作成
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
# これ以降の処理...
driver.get('https://www.google.com')
print(driver.title)
driver.quit()結局何を使うべきか
プログラムによって調整は必要ですが、個人的に必須なものだけをまとめました、お好みで追加・削除してください
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
options = Options()
options.add_argument('--start-maximized')
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
prefs = {
"profile.managed_default_content_settings.images": 2,
"download.default_directory": os.path.dirname(__file__),
"download.prompt_for_download": False,
"download_bubble.partial_view_enabled": False,
}
options.add_experimental_option("prefs", prefs)
service = Service()
service.creation_flags = 0x08000000
driver = webdriver.Chrome(options=options, service=service)
driver.get('https://www.google.com')
print(driver.title)
driver.quit()まとめ
オプションはかなりの量がありましたが、実のところ使うものは限られているので、上のテンプレのようにテンプレ化しておくのが推奨です
起動まわりの設定はテンプレで固定して、要素の待ち方はSelenium WebDriverWaitの使い方のほうにまとめているので、あわせて押さえておくとスクレイピングがぐっと安定します



コメント