功能和 ChromeOptions

Capability 是可用于自定义和配置 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,您需要知道 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 capability 指定在 Chrome 启动后要应用的偏好设置。对于自定义个人资料,您可以使用 user-data-dir Chrome 命令行开关告知 Chrome 要使用哪个个人资料:

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

在命令行上运行 Chrome 或使用 ChromeDriver 运行 Chrome,并将 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 类实现。在其他语言中,这些值存储在所选 capability 的 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 字典   一个字典,其中每个条目都由偏好设置的名称及其值组成。这些偏好设置会应用于用户数据文件夹中的 Local State 文件。
prefs 字典   一个字典,其中每个条目都由偏好设置的名称及其值组成。这些偏好设置仅应用于当前使用的用户个人资料。如需查看示例,请参阅 Chrome 用户数据目录中的“偏好设置”文件。
detach 布尔值 false 如果为 false,则无论会话是否退出,ChromeDriver 被终止时 Chrome 都会退出。
如果为 true,则只有在会话退出或关闭时,Chrome 才会退出。如果为 true 且会话未退出,ChromeDriver 将无法清理正在运行的 Chrome 实例使用的临时用户数据目录。
debuggerAddress 字符串
要连接到的 Chrome 调试程序服务器的地址,格式为 <hostname/ip:port>,例如“127.0.0.1:38947”
excludeSwitches 字符串列表   用于排除 ChromeDriver 在启动 Chrome 时默认传递的 Chrome 命令行开关的列表。请勿为开关添加 -- 前缀。
minidumpPath 字符串   用于存储 Chrome 迷你转储的目录。(仅在 Linux 上受支持。)
mobileEmulation 字典   一个字典,其中包含“deviceName”的值,或“deviceMetrics”和“userAgent”的值。如需了解详情,请参阅移动设备模拟
perfLoggingPrefs 字典   一个可选字典,用于指定性能日志记录偏好设置。如需了解详情,请参阅下文。
windowTypes 字符串列表   窗口句柄列表中显示的窗口类型的列表。 如需访问 WebView 元素,请在此列表中添加“WebView”。

perfLoggingPrefs 对象

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

名称 类型 默认值 说明
enableNetwork 布尔值 true 是否从“广告网络”网域收集事件。
enablePage 布尔值 true 是否收集网页网域中的事件。
traceCategories 字符串 (空) 应收集跟踪事件的 Chrome 跟踪类别的逗号分隔字符串。未指定或空字符串会停用跟踪。
bufferUsageReportingInterval 正整数 1000 请求的 DevTools 轨迹缓冲区使用事件之间的毫秒数。例如,如果为 1000,则表示每秒报告一次轨迹缓冲区已用空间。如果报告指明缓冲区用量为 100%,则会发出警告。

返回的功能

下面列出了所有 Chrome 专用返回的功能,也就是说,ChromeDriver 在您创建新会话时返回的内容。

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