LoginSignup
43
50

ChromeDriver でよく使うオプションのチートシート

Last updated at Posted at 2022-04-28

はじめに

毎回、気になったときに調べているような気がするのでまとめる。
ついでにnavigator.webdriverの対策もできる。
メモのつもりで書いているので深くは考えていない

  • 2023.11.20 ファイルのダウンロードに関するオプションを追加、細かな修正
  • 2023.11.15 ヘッドレスモードで起動したとき、コンソールにエラーログが出ないように修正
  • 2023.11.14 selenium 4 にオプションの内容を一新
  • 2023.11.14 selenium 3 のオプションを折りたたみ表示へ
  • 2022.06.03 コピペできるコードブロックに追記、並び替え
  • 2022.04.28 投稿

selenium 4

環境

アイテム バージョン
OS Windows 10 64bit
Python 3.8.7 64bit
selenium 4.15.2
ChromeDriver 119.0.6045.124

便宜上、 webdriver-manager を使っています。使い方は省略、以下に参考URLを置いておきます。
https://qiita.com/centerfield77/items/0aebd6ed452b278d872c

selenium 4.11.0 以降のバージョンに同じ機能が実装されました。今までありがとうございました。

起動オプション

引数 簡単な説明
--blink-settings=imagesEnabled=false 画像を非表示にする。
--disable-background-networking 拡張機能の更新、セーフブラウジングサービス、アップグレード検出、翻訳、UMAを含む様々なバックグラウンドネットワークサービスを無効にする。
--disable-blink-features=AutomationControlled navigator.webdriver=false となる設定。確認⇒driver.execute_script("return navigator.webdriver")
--disable-default-apps デフォルトアプリのインストールを無効にする。
--disable-dev-shm-usage ディスクのメモリスペースを使う。DockerやGcloudのメモリ対策でよく使われる。
--disable-extensions 拡張機能をすべて無効にする。
--disable-features=DownloadBubble ダウンロードが完了したときの通知を吹き出しから下部表示(従来の挙動)にする。
--disable-features=DownloadBubbleV2 --incognitoを使うとき、ダイアログ(名前を付けて保存)を非表示にする。
--disable-features=Translate Chromeの翻訳を無効にする。右クリック・アドレスバーから翻訳の項目が消える。
--disable-popup-blocking ポップアップブロックを無効にする。
--headless=new ヘッドレスモードで起動する。
--hide-scrollbars スクロールバーを隠す。
--ignore-certificate-errors SSL認証(この接続ではプライバシーが保護されません)を無効
--incognito シークレットモードで起動する。
--mute-audio すべてのオーディオをミュートする。
--no-default-browser-check アドレスバー下に表示される「既定のブラウザとして設定」を無効にする。
--propagate-iph-for-testing Chromeに表示される青いヒント(?)を非表示にする。
--start-maximized ウィンドウの初期サイズを最大化。--window-position, --window-sizeの2つとは併用不可
--test-type=gpu アドレスバー下に表示される「Chrome for Testing~~」を非表示にする。
--user-agent=Mozilla/5.0~~~~~... ユーザーエージェントの指定。
--window-position=100,100 ウィンドウの初期位置を指定する。--start-maximizedとは併用不可
--window-size=1600,1024 ウィンドウの初期サイズを設定する。--start-maximizedとは併用不可

実験的なオプション

引数 引数 簡単な説明
excludeSwitches ["enable-automation"] Chromeは自動テスト ソフトウェア~~ を非表示
excludeSwitches ["enable-logging"] コンソールに表示されるDevtoolsERROR:device_event_log_implなどのエラー を非表示
credentials_enable_service False パスワード保存のポップアップを無効
savefile.default_directory download_dir ダイアログ(名前を付けて保存)の初期ディレクトリを指定
download.default_directory download_dir ダウンロード先を指定
download_bubble.partial_view_enabled False ダウンロードが完了したときの通知(吹き出し/下部表示)を無効にする。
plugins.always_open_pdf_externally True Chromeの内部PDFビューアを使わない(=URLにアクセスすると直接ダウンロードされる)

ちょっとした小技
起動オプションにある --incognito を使うと、パスワード保存のポップアップを無効にする設定は省略可能です。

注意①
引数 download_dir は変数名なので、自分が分かりやすい変数名に変えてください。

使わなくなったオプション

引数 簡単な説明
options.add_argument("--disable-browser-side-navigation") このオプションは削除されました。
options.add_argument("--disable-gpu") 以前は--headlessと一緒に使われることが多かったが、今は必要ない。
options.add_argument("--no-sandbox") 非推奨。https://unix.stackexchange.com/questions/68832/
options.add_experimental_option("useAutomationExtension", False) 説明を読む限り、あってもなくても変わらない。
prefs = {"download.directory_upgrade": True,} 説明 #1991-1992行を読む限り、必要ない。
prefs = {"profile.default_content_setting_values.notifications": 2,} あってもなくても変わらない。
prefs = {"profile.password_manager_enabled": False,} あってもなくても変わらない。

コピペできるコードブロック

chrome_option.py
from pathlib import Path

from anti_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# ------ download_dir の変数 ------
# パスにOneDriveが含まれているときの対策
f_lst = list(Path.home().glob("*/Downloads"))
if len(f_lst) == 0:
    f_lst = list(Path.home().glob("Downloads"))
download_dir = str(f_lst[0])

# ------ ChromeDriver のオプション ------
options = Options()
# options.add_argument("--blink-settings=imagesEnabled=false")                                 # 画像を非表示にする。
options.add_argument("--disable-background-networking")                                      # 拡張機能の更新、セーフブラウジングサービス、アップグレード検出、翻訳、UMAを含む様々なバックグラウンドネットワークサービスを無効にする。
options.add_argument("--disable-blink-features=AutomationControlled")                        # navigator.webdriver=false となる設定。確認⇒ driver.execute_script("return navigator.webdriver")
options.add_argument("--disable-default-apps")                                               # デフォルトアプリのインストールを無効にする。
options.add_argument("--disable-dev-shm-usage")                                              # ディスクのメモリスペースを使う。DockerやGcloudのメモリ対策でよく使われる。
options.add_argument("--disable-extensions")                                                 # 拡張機能をすべて無効にする。
# options.add_argument("--disable-features=DownloadBubble")                                    # ダウンロードが完了したときの通知を吹き出しから下部表示(従来の挙動)にする。
options.add_argument('--disable-features=DownloadBubbleV2')                                  # `--incognito`を使うとき、ダイアログ(名前を付けて保存)を非表示にする。
options.add_argument("--disable-features=Translate")                                         # Chromeの翻訳を無効にする。右クリック・アドレスバーから翻訳の項目が消える。
# options.add_argument("--disable-popup-blocking")                                             # ポップアップブロックを無効にする。
# options.add_argument("--headless=new")                                                       # ヘッドレスモードで起動する。
options.add_argument("--hide-scrollbars")                                                    # スクロールバーを隠す。
options.add_argument("--ignore-certificate-errors")                                          # SSL認証(この接続ではプライバシーが保護されません)を無効
options.add_argument("--incognito")                                                          # シークレットモードで起動する。
options.add_argument("--mute-audio")                                                         # すべてのオーディオをミュートする。
options.add_argument("--no-default-browser-check")                                           # アドレスバー下に表示される「既定のブラウザとして設定」を無効にする。
options.add_argument("--propagate-iph-for-testing")                                          # Chromeに表示される青いヒント(?)を非表示にする。
# options.add_argument("--start-maximized")                                                    # ウィンドウの初期サイズを最大化。--window-position, --window-sizeの2つとは併用不可
# options.add_argument("--test-type=gpu")                                                      # アドレスバー下に表示される「Chrome for Testing~~」を非表示にする。
options.add_argument("--user-agent=" + UserAgent("windows").chrome)                          # ユーザーエージェントの指定。
options.add_argument("--window-position=100,100")                                            # ウィンドウの初期位置を指定する。--start-maximizedとは併用不可
options.add_argument("--window-size=1600,1024")                                              # ウィンドウの初期サイズを設定する。--start-maximizedとは併用不可
options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"])  # Chromeは自動テスト ソフトウェア~~ | コンソールに表示されるエラー を非表示
# options.set_capability("browserVersion", "117")                                              # `--headless=new`を使うとき、コンソールに表示されるエラーを非表示にするための必須オプション
prefs = {
    "credentials_enable_service": False,                                                     # パスワード保存のポップアップを無効
    "savefile.default_directory": download_dir,                                              # ダイアログ(名前を付けて保存)の初期ディレクトリを指定
    "download.default_directory": download_dir,                                              # ダウンロード先を指定
    "download_bubble.partial_view_enabled": False,                                           # ダウンロードが完了したときの通知(吹き出し/下部表示)を無効にする。
    "plugins.always_open_pdf_externally": True,                                              # Chromeの内部PDFビューアを使わない(=URLにアクセスすると直接ダウンロードされる)
}
options.add_experimental_option("prefs", prefs)

# ------ ChromeDriver の起動 ------
service = Service()
driver = webdriver.Chrome(service=service, options=options)
driver.get("https://www.hogehoge.jp")

変数 download_dir について
デスクトップパスが取得できないことがあったのでpathlibで対策をしました。
ダウンロードフォルダを指定しているので、適宜変えてください。

pip install anti-useragent のインストールが必要です。

"--user-agent" を使わない場合は以下の内容を削除してください。
from anti_useragent import UserAgent
options.add_argument("--user-agent=" + UserAgent("windows").chrome)

anti-useragent 詳細は以下のURLから
https://pypi.org/project/anti-useragent/1.0.10/

selenium 3.141.0 (記事更新前)は折りたたみました

selenium 3(記事更新前)

環境

アイテム バージョン
OS Windows 10 64bit
Python 3.8.7 64bit
selenium 3.141.0
webdriver-manager 3.5.4
ChromeDriver 101.0.4951

便宜上、 webdriver-manager を使っています。使い方は省略、以下に参考URLを置いておきます。

https://qiita.com/centerfield77/items/0aebd6ed452b278d872c

webdriver-manager を使わない人向け
下記にあるコピペできるコードブロックの内容を変更してください。
【削除】from webdriver_manager.chrome import ChromeDriverManager
【変更】ChromeDriverManager().install() から ChromeDriverのフルパス指定

起動オプション

引数 簡単な説明
--blink-settings=imagesEnabled=false 画像の非表示
--disable-blink-features=AutomationControlled navigator.webdriver=false とする設定 ↓ 確認用コマンド
driver.execute_script('return navigator.webdriver')
--disable-browser-side-navigation ”Timed out receiving message from renderer:” の修正
--disable-dev-shm-usage ディスクのメモリスペースを使う
--disable-extensions すべての拡張機能を無効
--disable-gpu GPUハードウェアアクセラレーションを無効
--headless ヘッドレスモードで起動
--ignore-certificate-errors SSL認証(この接続ではプライバシーが保護されません)を無効
--incognito シークレットモードで起動
--no-sandbox Chromeの保護機能を無効
--start-maximized 初期のウィンドウサイズを最大化
--window-size=1920,1080 初期のウィンドウサイズを指定

実験的なオプション

引数 引数 簡単な説明
profile.default_content_setting_values.notifications 2 通知ポップアップを無効
credentials_enable_service False パスワード保存のポップアップを無効
profile.password_manager_enabled False パスワード保存のポップアップを無効
download.default_directory download_dir ダウンロード先のディレクトリを指定

ちょっとした小技
シークレットモードで起動するオプション --incognito を入れれば、
パスワード保存のポップアップを無効にする設定は省略可能です。

注意①
credentials_enable_serviceprofile.password_manager_enabled は2つ合わせて使います。
credentials_enable_service 1つだけでもパスワード保存のポップアップを無効にできますが、
ネット情報や書籍からも、2つ合わせて使っているので足並みをそろえます。

注意②
引数 download_dir は変数名なので、自分が分かりやすい変数名に変えてください。

コピペできるコードブロック

chrome_option.py
import getpass
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

# ------ download_dir の変数 ------
download_dir = f'C:\\Users\\{getpass.getuser()}\\Desktop\\download_folder'

# ------ ChromeDriver のオプション ------
options = Options()
options.add_argument('--blink-settings=imagesEnabled=false')                    # 画像の非表示
options.add_argument('--disable-blink-features=AutomationControlled')           # navigator.webdriver=false とする設定
options.add_argument('--disable-browser-side-navigation')                       # Timed out receiving message from renderer: の修正
options.add_argument('--disable-dev-shm-usage')                                 # ディスクのメモリスペースを使う
options.add_argument('--disable-extensions')                                    # すべての拡張機能を無効
options.add_argument('--disable-gpu')                                           # GPUハードウェアアクセラレーションを無効
# options.add_argument('--headless')                                            # ヘッドレスモードで起動
options.add_argument('--ignore-certificate-errors')                             # SSL認証(この接続ではプライバシーが保護されません)を無効
options.add_argument('--incognito')                                             # シークレットモードで起動
options.add_argument('--no-sandbox')                                            # Chromeの保護機能を無効
# options.add_argument('--start-maximized')                                     # 初期のウィンドウサイズを最大化
options.add_argument('--window-size=1920,1080')                                 # 初期のウィンドウサイズを指定
options.add_experimental_option("excludeSwitches", ['enable-automation'])       # Chromeは自動テスト ソフトウェア~~ を非表示
options.add_experimental_option("excludeSwitches", ['enable-logging'])          # ERROR:device_event_log_impl.cc~~ などのログ出力を無効化
options.add_experimental_option('useAutomationExtension', False)                # 拡張機能の自動更新を停止
prefs = {
    'profile.default_content_setting_values.notifications' : 2,                 # 通知ポップアップを無効
    'credentials_enable_service' : False,                                       # パスワード保存のポップアップを無効
    'profile.password_manager_enabled' : False,                                 # パスワード保存のポップアップを無効
    # 'download.default_directory' : download_dir                               # ダウンロード先のディレクトリを指定
}
options.add_experimental_option('prefs', prefs)

# ------ ChromeDriver の起動 ------
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get('https://www.hogehoge.jp')

変数 download_dir について
記載されたパスは適宜変えてください。
また、存在しないパスを指定しても動作するのでよく確認してください。

最後に

何か間違いなどあればコメントください。

メモ
Timed out receiving message from renderer の修正、他の引数など
Chrome オプション機能一覧(1)
Chrome オプション機能一覧(2)
上記の注意①で挙げた書籍

43
50
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
43
50