我在使用 ChromeDriver 2.24 和 Selenium 3.0 时遇到了麻烦。
对我来说,以下代码有效:
var service = ChromeDriverService.CreateDefaultService(driverPath);
var downloadPrefs = new Dictionary<string, object>
{
{"default_directory", @"C:\Users\underscore\MyCustomLocation"},
{"directory_upgrade", true}
};
var options = new ChromeOptions();
options.AddUserProfilePreference("download", downloadPrefs);
return new ChromeDriver(service, options);
希望这对现在尝试这样做的人有所帮助。
以防将来发生变化;我通过打开我的默认 Chrome 首选项文件验证了所需的格式。该文件的位置可以通过浏览到chrome://version 并在配置文件路径指定的位置打开首选项文件来找到。这表明默认的"download" 键具有具有这些值的对象。
然后我可以通过打开 Selenium Chrome 浏览器使用的首选项文件来检查更改是否已应用(再次检查来自chrome://version 的位置)。
编辑 2
同样,为了禁用阻止文件下载的内置 Chrome PDF 查看器,我在配置中添加了以下几行:
var pdfViewerPlugin = new Dictionary<string, object>
{
["enabled"] = false,
["name"] = "Chrome PDF Viewer"
};
var pluginsList = new Dictionary<string, object>
{
{ "plugins_list", new [] { pdfViewerPlugin } }
};
var downloadPreferences = new Dictionary<string, object>
{
{"default_directory", launchOptions.DownloadFolder},
{"directory_upgrade", true}
};
var options = new ChromeOptions();
options.AddUserProfilePreference("download", downloadPreferences);
options.AddUserProfilePreference("plugins", pluginsList);
火狐
由于我今天又浪费了一个小时,这里是运行相同版本 Selenium 的 Firefox (49+) 的配置(注意:这不适用于 GeckoDriver 0.10.0 和 Selenium 3.0.0+ ,GeckoDriver 必须是 0.11.1 版本):
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GeckoBinary");
var service = FirefoxDriverService.CreateDefaultService(path);
service.HideCommandPromptWindow = true;
var profile = new FirefoxProfile();
profile.SetPreference("browser.download.dir", myDownloadLocation);
profile.SetPreference("browser.download.downloadDir", myDownloadLocation);
profile.SetPreference("browser.download.defaultFolder", myDownloadLocation);
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", ContentTypes.AllTypesSingleLine);
profile.SetPreference("pdfjs.disabled", true);
profile.SetPreference("browser.download.useDownloadDir", true);
profile.SetPreference("browser.download.folderList", 2);
return new FirefoxDriver(service, new FirefoxOptions
{
Profile = profile
}, TimeSpan.FromMinutes(5));
其中ContentTypes.AllTypesSingleLine 只是一个包含 mime 类型的字符串,例如:
application/pdf;application/excel;...
从 GeckoDriver 0.11.1 和 Selenium 3.0.1 开始,这可以简化为:
var options = new FirefoxOptions();
options.SetPreference("browser.download.dir", launchOptions.DownloadFolder);
options.SetPreference("browser.download.downloadDir", launchOptions.DownloadFolder);
options.SetPreference("browser.download.defaultFolder", launchOptions.DownloadFolder);
options.SetPreference("browser.helperApps.neverAsk.saveToDisk", ContentTypes.AllTypesSingleLine);
options.SetPreference("pdfjs.disabled", true);
options.SetPreference("browser.download.useDownloadDir", true);
options.SetPreference("browser.download.folderList", 2);
return new FirefoxDriver(service, options, TimeSpan.FromMinutes(5));