功能與 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 啟動後套用的偏好設定。如果後者,您可以使用 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 最大化功能

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 string   要使用的 Chrome 執行檔路徑 (在 Mac OS X 上,這裡的二進位檔不是實際二進位檔,例如「/Applications/Google Chrome.app/Contents/MacOS/Google Chrome」)
extensions 字串清單   啟動時要安裝的 Chrome 擴充功能清單。清單中的每個項目都必須是採用 Base-64 編碼的 Chrome 擴充功能 (.crx)
localState 字典   字典,每個項目都包含偏好設定名稱及其值。這些偏好設定會套用到使用者資料資料夾中的「本機狀態」檔案。
prefs 字典   字典,每個項目都包含偏好設定名稱及其值。這些偏好設定只會套用至使用中的使用者設定檔。如需範例,請參閱 Chrome 使用者資料目錄中的「偏好設定」檔案。
detach boolean 如果為 false,在 ChromeDriver 終止時,無論工作階段是否結束,Chrome 都會遭到關閉。如果為 true,Chrome 只會在工作階段關閉 (或關閉) 時關閉。請注意,如果設為 true,且工作階段未結束,ChromeDriver 就無法清除執行中 Chrome 執行個體正在使用的暫存使用者資料目錄。
debuggerAddress string
Chrome 偵錯工具伺服器要連線的位址,格式為 <主機名稱/ip:port>,例如「127.0.0.1:38947」
excludeSwitches 字串清單   Chrome 指令列清單會切換,用於在啟動 Chrome 時預設排除該 ChromeDriver。請勿加上「--」前置字元。
minidumpPath  string   儲存 Chrome minidump 的目錄。(僅適用於 Linux)。
mobileEmulation 字典   字典中有「deviceName」的值,或是「deviceMetrics」和「userAgent」的值。詳情請參閱「行動裝置模擬」一文。
perfLoggingPrefs 字典   選用字典,用於指定效能記錄偏好設定。詳情請參閱下方內容。
windowTypes 字串清單   顯示在視窗控點清單中的視窗類型清單。如要存取 <webview> 元素,請在這份清單中加入「Webview」。

perfLoggingPrefs 個物件

PerfLoggingPrefs 字典採用下列格式 (所有索引鍵均為選填):

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

傳回的功能

這是所有 Chrome 特有的功能清單。(也就是在建立新工作階段時,ChromeDriver 傳回的內容)

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