機能と ChromeOptions

機能とは、ChromeDriver セッションのカスタマイズと構成に使用できるオプションです。このページでは、ChromeDriver でサポートされているすべての機能とそれらの使用方法について説明します。

WebDriver 言語 API は、ChromeDriver に機能を渡す方法を提供します。正確なメカニズムは言語によって異なりますが、ほとんどの言語では、次のメカニズムのいずれかまたは両方が使用されています。

  1. ChromeOptions クラスを使用します。Java、Python などでサポートされています。
  2. DesiredCapabilities クラスを使用します。Python や Ruby などでサポートされています。Java でも使用できますが、Java での使用は非推奨です。

ChromeOptions クラスを使用する

ChromeOptions のインスタンスを作成できます。これには、ChromeDriver 固有の機能を設定する便利なメソッドがあります。次に、ChromeOptions オブジェクトを ChromeDriver コンストラクタに渡します。

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

Selenium バージョン 3.6.0 以降では、Java の ChromeOptions クラスも Capabilities インターフェースを実装しており、ChromeDriver に固有ではない他の WebDriver 機能を指定できます。

ChromeOptions options = new ChromeOptions();

// Add the WebDriver proxy capability.
Proxy proxy = new Proxy();
proxy.setHttpProxy("myhttpproxy:3337");
options.setCapability("proxy", proxy);

// Add a ChromeDriver-specific capability.
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

DesiredCapabilities の使用

DesiredCapabilities を使用するには、ケーパビリティの名前とそれが取得する値の型を把握している必要があります。全リストについては、こちらをご覧ください。

Python

caps = webdriver.DesiredCapabilities.CHROME.copy() 
caps['acceptInsecureCerts'] = True
driver = webdriver.Chrome(desired_capabilities=caps)

Ruby

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
     "goog:chromeOptions" => {"args" => [ "window-size=1000,800" ]})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

一般的なユースケース

カスタム プロファイル(ユーザーデータ ディレクトリ)を使用する

デフォルトでは、ChromeDriver はセッションごとに新しい一時的なプロファイルを作成します。特別な設定を行ったり、カスタム プロファイル全体を使用したりしたい場合もあります。前者の場合は、「chrome.prefs」機能(後述)を使用して、Chrome の起動後に適用する設定を指定できます。後者の場合は、Chrome コマンドライン スイッチ user-data-dir を使用して、使用するプロファイルを Chrome に指定できます。

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=/path/to/your/custom/profile");

user-data-dir スイッチを新しいディレクトリに設定して、(コマンドラインまたは ChromeDriver から)Chrome を実行するだけで、独自のカスタム プロファイルを作成できます。パスが存在しない場合、Chrome は指定された場所に新しいプロファイルを作成します。その後、必要に応じてプロファイルの設定を変更すると、ChromeDriver でそのプロファイルを使用できるようになります。ブラウザで chrome://version を開き、Chrome で使用されているプロファイルを確認します。

Chrome を最大限活用する

ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");

標準以外の場所で Chrome の実行可能ファイルを使用する

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

ブロック ダイアログ ウィンドウ

ChromeDriver では、ポップアップ ウィンドウを許可するようにデフォルトで Chrome が設定されます。ポップアップをブロックする(ChromeDriver で制御されない Chrome の通常の動作に戻す)には、次の手順を行います。

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches",
     Arrays.asList("disable-popup-blocking"));

ダウンロード ディレクトリを設定

次のコードを使用すると、ファイルを特定のディレクトリにダウンロードするように Chrome を設定できます。ただし、いくつかの注意点があります。

  • Chrome では、ダウンロードに特定のディレクトリを使用することが禁止されています。特に、デスクトップ フォルダをダウンロード ディレクトリとして使用することはできません。Linux でも、ダウンロードにホーム ディレクトリを使用できません。禁止ディレクトリの正確なリストは変更される可能性があるため、システムにとって特別な意味を持たないディレクトリを使用することをおすすめします。
  • ChromeDriver はダウンロードの完了を自動的に待機しません。早期に Driver.quit() を呼び出した場合、ダウンロードが完了する前に Chrome が終了することがあります。
  • 相対パスは、常に機能するとは限りません。代わりにフルパスを使用することをおすすめします。
  • Windows の場合は、パスの区切り文字として "" を使用します。Windows では「/」の使用は信頼できません。
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "/directory/path");
options.setExperimentalOption("prefs", prefs);

認定される機能

ChromeDriver で受け入れられる標準機能については、Selenium のドキュメントW3C WebDriver 標準をご覧ください。ここでは Chrome 固有の機能のみを記載しています。

ChromeOptions オブジェクト

Chrome 固有の機能のほとんどは、ChromeOptions オブジェクトを通じて公開されます。一部の言語では、これは ChromeOptions クラスによって実装されます。他の言語では、必要なケーパビリティでは goog:chromeOptions ディクショナリに保存されます。

名前 タイプ デフォルト  説明 
args  文字列のリスト   Chrome の起動時に使用するコマンドライン引数のリスト。関連付けられた値を持つ引数は「=」記号で区切る必要があります(例:['start-maximized', 'user-data-dir=/tmp/temp_profile'])。Chrome の引数のリストについては、こちらをご覧ください。
binary 文字列   使用する Chrome の実行可能ファイルのパス(Mac OS X の場合は、アプリだけでなく、実際のバイナリである必要があります。例: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
extensions 文字列のリスト   起動時にインストールする Chrome 拡張機能のリスト。リストの各項目は、Base64 でエンコードされたパック Chrome 拡張機能(.crx)である必要があります。
localState dictionary   設定の名前と値で構成される各エントリを含む辞書。これらの設定は、ユーザーデータ フォルダ内のローカル状態ファイルに適用されます。
prefs dictionary   設定の名前と値で構成される各エントリを含む辞書。これらの設定は、使用中のユーザー プロフィールにのみ適用されます。例については、Chrome のユーザーデータ ディレクトリにある「Preferences」ファイルをご覧ください。
detach boolean false false の場合、セッションの終了にかかわらず、ChromeDriver の終了時に Chrome も終了します。true の場合、Chrome はセッションを終了(または終了)した場合にのみ終了します。true の場合、セッションが終了しない場合、ChromeDriver は実行中の Chrome インスタンスが使用している一時的なユーザーデータ ディレクトリをクリーンアップできません。
debuggerAddress 文字列
接続する Chrome デバッガ サーバーのアドレスを <hostname/ip:port> の形式で指定します(例: 127.0.0.1:38947)。
excludeSwitches 文字列のリスト   Chrome の起動時にデフォルトで ChromeDriver のパスを除外する Chrome コマンドライン スイッチのリスト。switch の先頭に -- を付けないでください。
minidumpPath  文字列   Chrome のミニダンプを保存するディレクトリです。(Linux でのみサポート)。
mobileEmulation dictionary   「deviceName」の値、または「deviceMetrics」と「userAgent」の値のいずれかを含む辞書。詳しくは、モバイル エミュレーションをご覧ください。
perfLoggingPrefs dictionary   パフォーマンス ロギングの設定を指定する辞書(省略可)。詳しくは以下をご確認ください。
windowTypes 文字列のリスト   ウィンドウ ハンドルのリストに表示されるウィンドウ タイプのリスト。<webview> 要素にアクセスするには、このリストに「webview」を含めます。

perfLoggingPrefs オブジェクト

perfLoggingPrefs ディクショナリの形式は次のとおりです(すべてのキーはオプションです)。

名前 種類 デフォルト 説明
enableNetwork boolean true ネットワーク ドメインからイベントを収集するかどうか。
enablePage boolean true ページドメインからイベントを収集するかどうかを指定します。
traceCategories string (空白) トレース イベントを収集する Chrome トレース カテゴリのカンマ区切り文字列。未指定または空の文字列を使用すると、トレースが無効になります。
bufferUsageReportingInterval 正の整数 1000 DevTools トレース バッファ使用状況イベント間のリクエストされたミリ秒数。たとえば、1,000 の場合、1 秒に 1 回、DevTools はトレース バッファの空き容量が報告されます。バッファ使用量が 100% であることがレポートに示されている場合は、警告が発行されます。

返される機能

以下は、Chrome に固有の返されるすべての機能のリストです。(新しいセッションの作成時に ChromeDriver が返す内容)。

名前 タイプ  説明 
chrome.chromedriverVersion 文字列 最新バージョンの ChromeDriver
userDataDir 文字列 Chrome が使用しているユーザーデータ ディレクトリのパスです。「chrome」辞書内にあります