功能與 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,您必須知道功能名稱和其採用的值類型。請按這裡查看完整清單。

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");

如要建立自訂設定檔,只需透過指令列或 ChromeDriver 執行 Chrome,並將 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 不會自動等待下載作業完成。如果太早呼叫 drive.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);

已辨識的功能

請參閱 Selenium 說明文件W3C WebDriver 標準 ChromeDriver 接受的功能。這裡我們只列出 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 擴充功能清單。清單中的每個項目都必須是採用 Base-64 編碼的封裝 Chrome 擴充功能 (.crx)
localState 字典   每個項目的字典,包含偏好設定名稱和值。這些偏好設定會套用至使用者資料資料夾中的本機狀態檔案。
prefs 字典   每個項目的字典,包含偏好設定名稱和值。這些偏好設定只會套用至使用中的使用者設定檔。查看「偏好設定」安裝於 Chrome 使用者資料目錄中。
detach 布林值 如果設為 False,無論工作階段是否結束,ChromeDriver 會在終止後關閉。如果設為 True,則 Chrome 只會在工作階段結束 (或關閉) 時結束。請注意,如果為 true,且工作階段尚未結束,ChromeDriver 就無法清除執行中的 Chrome 執行個體目前使用的暫存使用者資料目錄。
debuggerAddress 字串
要連線的 Chrome 偵錯工具伺服器位址,格式為 <hostname/ip:port>,例如「127.0.0.1:38947」
excludeSwitches 字串清單   選擇 Chrome 指令列清單,即可在啟動 Chrome 時預設略過該 ChromeDriver。請勿使用 -- 前置字元切換,
minidumpPath  字串   儲存 Chrome minidump 的目錄。(僅在 Linux 上提供支援)。
mobileEmulation 字典   包含「deviceName」值的字典,或是「deviceMetrics」和「userAgent」的值。詳情請參閱「行動裝置模擬」一文。
perfLoggingPrefs 字典   指定效能記錄偏好設定的選用字典。詳情請參閱下方內容。
windowTypes 字串清單   會顯示在視窗控點清單中的視窗類型清單。為了存取 <webview>元素,包括「webview」。

perfLoggingPrefs 個物件

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

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

傳回的功能

這份清單列出了 Chrome 專用的所有傳回功能。(亦即,在建立新的工作階段時,ChromeDriver 傳回的內容)

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