功能和 ChromeOptions

功能是指可用于自定义和配置 ChromeDriver 会话的选项。此页面记录了 ChromeDriver 支持的所有功能以及如何使用这些功能。

WebDriver 语言 API 提供了将功能传递给 ChromeDriver 的方法。具体机制因语言而异,但大多数语言使用以下一种或两种机制:

  1. 使用 ChromeOptions 类。Java、Python 等均支持此操作。
  2. 使用 DesiredCapabilities 类。Python、Ruby 等支持此 API。虽然此 API 也在 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,您需要知道 capability 的名称及其采用的值类型。请点击此处查看完整列表。

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 不会自动等待下载完成。如果您过早调用 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);

公认的功能

如需了解 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 扩展程序列表。列表中的每项内容都应是一个采用 base-64 编码的打包 Chrome 扩展程序 (.crx)
localState 字典   每个条目都包含偏好设置的名称及其值的字典。这些偏好设置将应用于用户数据文件夹中的 Local State 文件。
prefs 字典   每个条目都包含偏好设置的名称及其值的字典。这些偏好设置仅应用于正在使用的用户个人资料。有关示例,请参阅 Chrome 的用户数据目录中的“偏好设置”文件。
detach boolean false 如果此政策设为 false,ChromeDriver 被终止后,Chrome 将会退出,无论相应会话是否已退出。如果为 true,则 Chrome 只会在会话已退出(或关闭)时退出。请注意,如果为 true,并且未退出会话,则 ChromeDriver 无法清理正在运行的 Chrome 实例正在使用的临时用户数据目录。
debuggerAddress 字符串
要连接的 Chrome 调试程序服务器的地址(采用 <hostname/ip:port> 格式),例如“127.0.0.1:38947”
excludeSwitches 字符串列表   Chrome 命令行开关的列表,用于在启动 Chrome 时排除该 ChromeDriver 默认通过。请勿在 switch 前面添加 -- 前缀。
minidumpPath  字符串   用于存储 Chrome 小型转储的目录。(仅在 Linux 上受支持。)
mobileEmulation 字典   具有“deviceName”值或“deviceMetrics”和“userAgent”值的字典。如需了解详情,请参阅移动模拟
perfLoggingPrefs 字典   用于指定性能日志记录偏好设置的可选字典。如需了解详情,请参阅下文。
windowTypes 字符串列表   窗口手柄列表中显示的窗口类型列表。如需访问 <webview> 元素,请在此列表中添加“webview”。

perfLoggingPrefs 对象

perfLoggingPrefs 字典采用以下格式(所有键都是可选的):

名称 类型 默认 说明
enableNetwork boolean true 是否从广告网络网域收集事件。
enablePage boolean true 是否从网页网域收集事件。
traceCategories string (空) Chrome 跟踪类别(以英文逗号分隔)的字符串,应针对这些类别收集跟踪事件。未指定或空字符串会停用跟踪。
bufferUsageReportingInterval 正整数 1000 开发者工具追踪缓冲区使用事件之间请求的毫秒数。例如,如果值为 1000,那么开发者工具每秒报告一次,会报告跟踪缓冲区的占用情况。如果报告显示缓冲区使用率为 100%,系统就会发出警告。

返回的功能

这是系统返回的所有 Chrome 专有功能的列表。(即 ChromeDriver 会在您创建新会话时返回的内容)

名称 类型  说明 
chrome.chromedriverVersion 字符串 ChromeDriver 版本
userDataDir 字符串 Chrome 正在使用的用户数据目录的路径;请注意,该路径位于“chrome”字典中