C# 如何使用SeleniumWebDriver.NET绑定设置Chrome首选项?
这是我正在使用的,用户代理可以成功设置,而下载首选项不能 Windows 7、Chrome 26、Selenium-dotnet-2.31.2、chromedriver_win_26.0.1383.0C# 如何使用SeleniumWebDriver.NET绑定设置Chrome首选项?,c#,google-chrome,selenium,webdriver,selenium-webdriver,C#,Google Chrome,Selenium,Webdriver,Selenium Webdriver,这是我正在使用的,用户代理可以成功设置,而下载首选项不能 Windows 7、Chrome 26、Selenium-dotnet-2.31.2、chromedriver_win_26.0.1383.0 ChromeOptions ChromeOptions=新的ChromeOptions(); var prefs=新字典{ {“download.default_目录”@“C:\code”}, {“download.prompt_for_download”,false} }; chromeOpti
ChromeOptions ChromeOptions=新的ChromeOptions();
var prefs=新字典{
{“download.default_目录”@“C:\code”},
{“download.prompt_for_download”,false}
};
chromeOptions.AddAddAdditionalCapability(“chrome.prefs”,prefs);
AddArgument(“--user agent=“+”some safari agent”);
var驱动器=新的色度驱动器(色度选项);
取自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": ""
}
检查位于*temp\Google\Chrome\User Data\Default\Preferences
的临时首选项文件,没有设置“默认目录”
和“提示下载”
"download": {
"directory_upgrade": true
},
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:\path\chromedriver", options);
}
公共类ChromeOptionsWithPrefs:ChromeOptions
{
公共字典prefs{get;set;}
}
公共静态void Initialize()
{
var options=new ChromeOptionsWithPrefs();
options.prefs=新字典
{
{“intl.accept_语言”,“nl”}
};
_驱动程序=新的ChromeDriver(@“C:\path\ChromeDriver”,选项);
}
如果您已更新到Chrome版本36.0.x和Selenium 2.42,Martins解决方案将不再有效
它似乎已经被更新了。现在可以使用以下代码
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\");
我认为马丁的解决方案很好,也很准确,但它突然对我不起作用了,所以我自然得看看是否能找到解决方案。很有魅力。非常感谢。你怎么知道的?有参考资料吗?我从中学到prefs应该是chromeOptions的一部分。然后,我用JetBrains dotPeek对Selenium.NET驱动程序进行了反向工程,以查看它如何将选项传递给chromedriver.exe。显然,ChromeOptions实际上是chromedriver所期望的ChromeOptions对象的包装器。NET库将ChromeOptions序列化为JSON并将其传递给chromedriver。通过继承ChromeOptions并添加您自己的属性,您可以添加更多选项:-)好极了,Martin!这真是太棒了!尽管.NET样式和一致性规则要求属性大写,但读者的一个小免责声明是不要将
prefs
属性大写。否则,Chrome驱动程序将无法正确解析它,并将在调用时通过错误。对于无法实现此功能的用户,请参阅下面Ben的解决方案。如果此答案不再有效,是否应该删除或标记?这就像最新Chrome的魅力一样。你让我开心……)