Capability 是可用于自定义和配置 ChromeDriver 会话的选项。本页面介绍了 ChromeDriver 支持的所有功能以及如何使用这些功能。
WebDriver 语言 API 提供了向 ChromeDriver 传递功能的方法。具体机制因语言而异,但大多数语言都使用以下一种或两种机制:
- 使用
ChromeOptions
类。Java、Python 等语言均支持此方法。 - 使用
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
字典下。
perfLoggingPrefs
对象
perfLoggingPrefs
字典采用以下格式。所有键都是可选的:
返回的功能
下面列出了所有 Chrome 专用返回的功能,也就是说,ChromeDriver 在您创建新会话时返回的内容。