はじめに
毎回、気になったときに調べているような気がするのでまとめる。
ついでにnavigator.webdriverの対策もできる。
メモのつもりで書いているので深くは考えていない
- 2024.11.05 selenium 4.26.0 へオプションの内容を一新
- 2024.11.05 selenium 4.15.2 のオプションを折りたたみ表示へ
- 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 11 64bit |
Python | 3.10.10 64bit |
selenium | 4.26.0 |
Google Chrome | 130.0.6723.70 |
変更点
from fake_useragent import UserAgent
anti_useragent
(https://pypi.org/project/anti-useragent/) の更新が止まったため、
fake-useragent
(https://pypi.org/project/fake-useragent/) へ移行。
service.creation_flags = 0x08000000
呼び出したimport Service
でsubprocess.Popen
が使用されており、
subprocess.Popen
は Windowsの CreateProcess() 関数が使われているようで
10進数なら134217728
、16進数なら0x08000000
の値でCREATE_NO_WINDOW
を渡す、ということみたい。
参考URL:https://learn.microsoft.com/ja-jp/windows/win32/procthread/process-creation-flags
なお、selenium のバージョンが ~4.5.0 まではservice.creationflags
と、記述が変わる上に上記の内容が対応しているか不明。
シークレットモードでファイルをダウンロードする方法
...は、オプションで設定不可能なので別記事で紹介
起動オプション
引数 | 簡単な説明 |
---|---|
service.creation_flags = 0x08000000 | ヘッドレスモードでDevTools listening on ws:~~ を非表示にする。 |
--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=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つとは併用不可 |
--user-agent=Mozilla/5.0~~~~~... | ユーザーエージェントの指定。 |
--window-position=100,100 | ウィンドウの初期位置を指定する。--start-maximized とは併用不可 |
--window-size=1600,1000 | ウィンドウの初期サイズを設定する。--start-maximized とは併用不可 |
実験的なオプション
引数 | 引数 | 簡単な説明 |
---|---|---|
excludeSwitches | ["enable-automation"] | Chromeは自動テスト ソフトウェア~~ を非表示 |
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_experimental_option("excludeSwitches", ["enable-logging"]) |
service.creation_flags があるので削除 |
options.add_argument("--test-type=gpu") |
enable-automation があるので削除 |
options.add_argument("--disable-features=DownloadBubble") | このオプションは削除されました。 |
options.add_argument("--disable-features=DownloadBubbleV2") | このオプションは削除されました。 |
コピペできるコードブロック
from pathlib import Path
from fake_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 のオプション ------
service = Service()
service.creation_flags = 0x08000000 # ヘッドレスモードで DevTools listening on ws:~~ を表示させない
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=Translate") # Chromeの翻訳を無効にする。右クリック・アドレスバーから翻訳の項目が消える。
# options.add_argument("--disable-popup-blocking") # ポップアップブロックを無効にする。
# options.add_argument("--guest") # ゲストモードで起動する。--incognitoとは併用不可
# options.add_argument("--headless=new") # ヘッドレスモードで起動する。
options.add_argument("--hide-scrollbars") # スクロールバーを隠す。
options.add_argument("--ignore-certificate-errors") # SSL認証(この接続ではプライバシーが保護されません)を無効
# options.add_argument("--incognito") # シークレットモードで起動する。--guestとは併用不可
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("--user-agent=" + UserAgent(os="windows").chrome) # ユーザーエージェントの指定。
options.add_argument("--window-position=100,100") # ウィンドウの初期位置を指定する。--start-maximizedとは併用不可
options.add_argument("--window-size=1600,1000") # ウィンドウの初期サイズを設定する。--start-maximizedとは併用不可
options.add_experimental_option("excludeSwitches", ["enable-automation"]) # Chromeは自動テスト ソフトウェア~~ を非表示
# options.set_capability("browserVersion", "123") # ブラウザのバージョンを指定する。
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 の起動 ------
driver = webdriver.Chrome(service=service, options=options)
driver.get("https://www.hogehoge.jp")
変数 download_dir について
デスクトップパスが取得できないことがあったのでpathlib
で対策をしました。
ダウンロードフォルダを指定しているので、適宜変えてください。
pip install fake-useragent
のインストールが必要です。
"--user-agent" を使わない場合は以下の内容を削除してください。
from fake_useragent import UserAgent
options.add_argument("--user-agent=" + UserAgent("windows").chrome)
fake-useragent 詳細は以下のURLから
https://pypi.org/project/fake-useragent/
selenium 4.15.2 (記事更新前)は折りたたみました
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
以降のバージョンに同じ機能が実装されました。今までありがとうございました。
https://www.selenium.dev/blog/2023/whats-new-in-selenium-manager-with-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"] | コンソールに表示されるDevtools やERROR: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,} | あってもなくても変わらない。 |
コピペできるコードブロック
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_service と profile.password_manager_enabled は2つ合わせて使います。
credentials_enable_service 1つだけでもパスワード保存のポップアップを無効にできますが、
ネット情報や書籍からも、2つ合わせて使っているので足並みをそろえます。
注意②
引数 download_dir は変数名なので、自分が分かりやすい変数名に変えてください。
コピペできるコードブロック
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)
上記の注意①で挙げた書籍