SeleniumのOptionsとServiceまとめ【Python】

PythonとSeleniumのChrome起動オプション OptionsとServiceまとめ

SeleniumでChromeを起動する前に指定するOptionsServiceについて、おすすめを目的別にまとめました、Optionsはバージョンアップとともに変わったりするので不定期に更新していきます、2026年6月時点での最新版です

目次

前置き

特にOptionsは動作軽量を目指す機能も多いのですが、スクレイピングはなるべく人が操作している状態を再現したほうが安定するので、なるべく使わない方がいいが持論です

プロファイルを指定しなければ毎回、何も設定していないインストール直後のピュアな状態で起動するはずなので、その前提で必要な機能だけ選んでいけばいいと思います

Optionsについて

いわゆる起動オプションとして、Chromeの機能を設定できます、あくまでChrome用の機能なので「ChromeDriverとして要る?」と思うものもありますが、目的別に分類したので気になるところからチェックしてみてください

記述はoptions.add_argument(argument: str)で、必要な分だけ書いていきます、評価はあくまで個人的なものなので、お好みで取捨選択してください

数は多いですが全部覚える必要はありません、迷ったら後半の結局何を使うべきかのテンプレが基本で、中でもBot検知対策の--disable-blink-features=AutomationControlledは入れておくと安定します

高速化・軽量化目的

スクロールできます
オプション効果評価
--headless=new画面を表示せず(headless)起動、バックグラウンド処理向き一番需要あり、ただしエラーに気づきにくい/サイトによっては弾かれることも(昔の--headlessでなく今は=new)
--disable-gpuGPU処理を無効化昔の名残、新しいheadless(Chrome 109以降)ではほぼ不要、自分は付けない
--disable-extensions拡張機能を無効化して起動そもそも拡張なしが基本なのであってもなくても
--disable-dev-shm-usageLinux/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=AutomationControllednavigator.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-errorsSSL証明書のエラーを無視自己署名サイト等、使う機会は少なく不要でOK
--disable-password-managerパスワード保存を無効化保存させる場面がないので不要

表示・UI制御

スクロールできます
オプション効果評価
--hide-scrollbarsスクロールバーを非表示スクショを残すときくらい、お好みで
--app=URL指定したURLをアプリモードで起動手動操作しないので使う機会はなさそう
--disable-images画像の読み込みを無効化古い指定、headlessだと効かないことがある
--blink-settings=imagesEnabled=false画像の読み込みを無効化(より確実)headlessでも効く、画像を止めて高速化したいなら今はこちら
--disable-javascriptJavaScriptを無効化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”, Falsenavigator.webdriverをundefinedに近づける(Bot検知回避)★現在は非推奨、Chromeが使わなくなったのでexcludeSwitchesだけでOK
“mobileEmulation”, {“deviceName”: deviceName}スマホとしてブラウザを起動deviceNameに”iPhone 14 Pro Max”や”Pixel 7″など、DevToolsのデバイス一覧が参考
“prefs”, {dict}環境設定(preferences)をまとめて指定オプションと同じ内容ならこちらが推奨

excludeSwitchesを設定すると、↓のメッセージが消えます

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”: TrueChrome内蔵のPDFビューアを使わない
“profile.managed_default_content_settings.javascript”: 2JavaScriptの有効(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の使い方のほうにまとめているので、あわせて押さえておくとスクレイピングがぐっと安定します

📚 Python自動化の独学に効く本PR
退屈なことはPythonにやらせよう 第3版

退屈なことはPythonにやらせよう 第3版

Al Sweigart

Pythonクローリング&スクレイピング 増補改訂版

Pythonクローリング&スクレイピング 増補改訂版

加藤耕太

シゴトがはかどる Python自動処理の教科書

シゴトがはかどる Python自動処理の教科書

クジラ飛行机

私のおすすめからランダムで3冊を表示しています


最後に・・・

クラウドワークスココナラでお仕事受け付けています!

PythonとExcelを中心に仕事に役立つ業務ツールや自動化、スクレイピングツールの作成を受注していて、クラウドワークスでは気が付けば100件以上のお仕事を受注してきました!

会社員をやりながらの副業なので時間の捻出は相応ですが、クライアントの方々と近い立場でこちらからも提案しながら活動していますのでお悩みあれば是非ご相談ください

ココナラのプロフィールページへ

"ココナラ"に新規登録する際は1,000Pもらえる紹介コード使ってください

78E62K

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

この記事を書いた人

VBAとPythonを中心にユーザー側でできるITを自己学習しているので備忘録半分、学習履歴を残して同じ道を辿る人の参考になればとブログを始めました

副業でスクレイピングツール作成を中心にできることを色々やっていますのでご相談いただけるとありがたいです!


クラウドワークスのページへ


ココナラのページへ

コメント

コメントする

目次