功能是指可用于自定义和配置 ChromeDriver 会话的选项。此页面记录了 ChromeDriver 支持的所有功能以及如何使用这些功能。
WebDriver 语言 API 提供了将功能传递给 ChromeDriver 的方法。具体机制因语言而异,但大多数语言使用以下一种或两种机制:
- 使用
ChromeOptions
类。Java、Python 等均支持此操作。 - 使用
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
字典下。
perfLoggingPrefs
对象
perfLoggingPrefs 字典采用以下格式(所有键都是可选的):
名称 | 类型 | 默认 | 说明 |
---|---|---|---|
enableNetwork
|
boolean | true | 是否从广告网络网域收集事件。 |
enablePage
|
boolean | true | 是否从网页网域收集事件。 |
traceCategories
|
string | (空) | Chrome 跟踪类别(以英文逗号分隔)的字符串,应针对这些类别收集跟踪事件。未指定或空字符串会停用跟踪。 |
bufferUsageReportingInterval
|
正整数 | 1000 | 开发者工具追踪缓冲区使用事件之间请求的毫秒数。例如,如果值为 1000,那么开发者工具每秒报告一次,会报告跟踪缓冲区的占用情况。如果报告显示缓冲区使用率为 100%,系统就会发出警告。 |
返回的功能
这是系统返回的所有 Chrome 专有功能的列表。(即 ChromeDriver 会在您创建新会话时返回的内容)
名称 | 类型 | 说明 |
---|---|---|
chrome.chromedriverVersion
|
字符串 | ChromeDriver 版本 |
userDataDir
|
字符串 | Chrome 正在使用的用户数据目录的路径;请注意,该路径位于“chrome”字典中 |