这是我正在使用的,用户代理可以成功设置,而下载首选项不能。
Windows 7, Chrome 26, Selenium-dotnet-2.31.2, chromedriver_win_26.0.1383.0
ChromeOptions chromeOptions = new ChromeOptions();
var prefs = new Dictionary<string, object> {
{ "download.default_directory", @"C:code" },
{ "download.prompt_for_download", false }
};
chromeOptions.AddAdditionalCapability("chrome.prefs", prefs);
chromeOptions.AddArgument("--user-agent=" + "some safari agent");
var driver = new ChromeDriver(chromeOptions);
取自chromedriver.log:
[1.201][FINE]: Initializing session with capabilities {
"browserName": "chrome",
"chrome.prefs": {
"download.default_directory": "C:\code",
"download.prompt_for_download": false
},
"chrome.switches": [ "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version..." ],
"chromeOptions": {
"args": [ "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version..." ],
"binary": "",
"extensions": [ ]
},
"javascriptEnabled": true,
"platform": "WINDOWS",
"version": ""
}
检查*tempGoogleChromeUser DataDefaultPreferences
处的temp Preferences文件,没有设置"default_directory"
和"prompt_for_download"
。
"download": {
"directory_upgrade": true
},
如果您已经更新到Chrome 36.0版本。x和Selenium 2.42,马丁斯的解决方案不再工作。
似乎已经更新了。现在可以使用以下代码
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference(string preferenceName, object preferenceValue);
我目前用它来改变我的打印机设置为"另存为PDF",而不是使用默认的使用这个代码为例
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("printing.print_preview_sticky_settings.appState", "{"version":2,"isGcpPromoDismissed":false,"selectedDestinationId":"Save as PDF");
我认为Martin的解决方案很好很准确,但是突然对我不起作用了,所以我很自然地要看看我是否能找到一个解决方案。
Selenium dotNet驱动程序不支持将chrome.prefs
开箱即用。问题是chrome.prefs
必须在chromeOptions
节点下定义为prefs
。ChromeOptions
类不包含这个变量,所以您需要创建自己的ChromeOptions
类:
public class ChromeOptionsWithPrefs: ChromeOptions
{
public Dictionary<string,object> prefs { get; set; }
}
public static void Initialize()
{
var options = new ChromeOptionsWithPrefs();
options.prefs = new Dictionary<string, object>
{
{ "intl.accept_languages", "nl" }
};
_driver = new ChromeDriver(@"C:pathchromedriver", options);
}