功能與 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)

小茹

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 啟動後套用的偏好設定。如要使用自訂設定檔,您可以使用 user-data-dir Chrome 命令列切換鈕,告訴 Chrome 要使用哪個設定檔:

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

在指令列上執行 Chrome,或使用 ChromeDriver,並將 user-data-dir 切換鍵設為某個新目錄,即可建立自訂設定檔。

如果路徑不存在,Chrome 會在指定位置建立新設定檔。接著,您可以修改設定檔設定,ChromeDriver 日後就能使用該設定檔。在瀏覽器中開啟 chrome://version,查看 Chrome 使用的設定檔。

以最大化方式啟動 Chrome

使用 start-maximized 切換鈕啟動 Chrome 並將視窗最大化:

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

在非標準位置使用 Chrome 可執行檔

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

封鎖對話方塊視窗

根據預設,ChromeDriver 會將 Chrome 設為允許彈出式視窗。如要封鎖彈出式視窗,並在 Chrome 未受 ChromeDriver 控制時還原正常的 Chrome 行為,請執行下列操作:

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

設定下載目錄

您可以使用下列程式碼,將 Chrome 設定為將檔案下載至特定目錄。不過,請注意以下幾點:

  • Chrome 不允許使用特定目錄下載檔案。特別要注意,您無法使用電腦桌面資料夾做為下載目錄。在 Linux 上,您無法使用主目錄進行下載。禁止的目錄清單可能會有所變動,因此建議您使用對系統沒有特殊意義的專屬目錄。
  • ChromeDriver 不會自動等待下載作業完成。如果您過早呼叫 driver.quit(),Chrome 可能會在下載完成前終止。
  • 為獲得最佳效果,請使用完整路徑,因為相對路徑不一定有效。
  • 在 Windows 上使用 \` as path separators./` 不穩定。
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 執行檔路徑。
在 macOS X 上,這應該是實際的二進位檔,而非僅是應用程式,例如 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
extensions 字串清單   在啟動時安裝的 Chrome 擴充功能清單。清單中的每個項目都應為 base-64 編碼的已封裝 Chrome 擴充功能 (.crx)
localState 字典   字典,其中每個項目都包含偏好設定的名稱和值。這些偏好設定會套用至使用者資料資料夾中的本機狀態檔案。
prefs 字典   字典,其中每個項目都包含偏好設定的名稱和值。這些偏好設定只會套用至目前使用的使用者個人資料。如需範例,請參閱 Chrome 使用者資料目錄中的「Preferences」檔案。
detach 布林值 false 如果為 false,無論工作階段是否已關閉,ChromeDriver 都會在關閉時關閉 Chrome。
如果為 true,Chrome 只會在工作階段關閉或關閉時結束。如果為 True,且工作階段未結束,ChromeDriver 就無法清理執行中的 Chrome 例項所使用的暫時使用者資料目錄。
debuggerAddress 字串
要連線的 Chrome 偵錯工具伺服器位址,格式為 <hostname/ip:port>,例如「127.0.0.1:38947」
excludeSwitches 字串清單   這是 Chrome 指令列切換清單,可排除 ChromeDriver 在啟動 Chrome 時預設會傳送的切換。請勿在切換裝置前面加上 --
minidumpPath 字串   用來儲存 Chrome 迷你快照的目錄。(僅支援 Linux)。
mobileEmulation 字典   字典,其中包含「deviceName」的值,或「deviceMetrics」和「userAgent」的值。詳情請參閱「行動模擬」。
perfLoggingPrefs 字典   選用字典,用於指定效能記錄偏好設定。詳情請參閱下方內容。
windowTypes 字串清單   視窗句柄清單中顯示的視窗類型清單。如要存取 WebView 元素,請將「webview」納入此清單。
enableExtensionTargets 布林值 false 啟用 Chrome 擴充功能目標的內省功能。根據預設,ChromeDriver 不包含擴充功能目標 (自 Chrome 136 版起)。

perfLoggingPrefs 個物件

perfLoggingPrefs 字典的格式如下。所有鍵皆為選用項目:

名稱 類型 預設 說明
enableNetwork 布林值 true 是否要從網路網域收集事件。
enablePage 布林值 true 是否要從網頁網域收集事件。
traceCategories 字串 (空白) 以半形逗號分隔的字串,其中包含應收集追蹤事件的 Chrome 追蹤類別。未指定或為空白字串會停用追蹤功能。
bufferUsageReportingInterval 正整數 1000 開發人員工具追蹤緩衝區使用事件之間的所要求毫秒數。舉例來說,如果為 1000,則每秒會回報一次追蹤記錄緩衝區的使用率。如果報告指出緩衝區使用率為 100%,系統就會發出警告。

傳回的功能

以下是所有 Chrome 專屬傳回功能的清單,也就是 ChromeDriver 在您建立新工作階段時傳回的內容。

名稱 類型 說明
chrome.chromedriverVersion 字串 ChromeDriver 版本
userDataDir 字串 Chrome 使用的使用者資料目錄路徑,請注意,這個路徑位於「chrome」字典中