我很难同时尝试加载多个chrome配置文件,并且始终显示“未知错误:无法写入prefs文件” 我正在使用selenium 2.48.2和Selenium.WebDriver.ChromeDriver 2.20.0.0
string localAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
String chromeLocalAppDataPath = localAppDataPath + @"\Google\Chrome\User Data\Default\";
var options = new ChromeOptions();
options.AddArgument("--no-experiments");
options.AddArguments("user-data-dir=" + chromeLocalAppDataPath);
options.AddArgument("--disable-translate");
options.AddArguments("--start-maximized");
//options.AddArgument("--disable-plugins");
//options.AddArgument("--disable-extensions");
options.AddArgument("--no-default-browser-check");
options.AddArgument("--clear-token-service");
options.AddArgument("--disable-default-apps");
options.AddArgument("--no-displaying-insecure-content");
//options.AddArgument("--disable-block-external-urls");
options.AddArgument("--disable-bundled-ppapi-flash");
using (abcDataContext db = new abcDataContext())
{
Parallel.ForEach(fixtures, (current) =>
{
using (IWebDriver driver = new ChromeDriver(options)) // fail right here
{
driver.Navigate().GoToUrl("http://google.com");
}
});
counter++;
}
while (counter <= fixtures.Count() / 3);
}
更新:使用firefoxdriver,它可以正常使用默认配置文件
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("default");
Parallel.ForEach(collections, (current) =>
{
IWebDriver driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://google.com");
});
答案 0 :(得分:1)
什么是“固定装置”?这个集合是否是线程安全的?
此外,IWebDriver / ChromeDriver不是thread-safe。
您无法在Parallel.Foreach循环中执行此操作。你需要在此操作之外放置锁定,但是它不会通过使用parallel.Foreach来改善你想要的任何性能。
答案 1 :(得分:1)
多个chrome实例不能同时使用相同的user-data-dir。
如果要使用相同的配置文件,则必须将原始配置文件复制到其他临时位置,并将该位置作为user-data-dir传递。
答案 2 :(得分:1)
造成此问题的另一个原因可能是配置文件目录(此处为“默认”目录)是隐藏目录,就像我的情况一样。
取消隐藏文件夹,它可能会再次开始工作
答案 3 :(得分:0)
根据this link,这是较新的Chrome驱动程序版本的已知问题。 7月21日发表的评论之一如下:
Exception "unknown error: failed to write prefs file" is thrown when same
user-data-dir and profile is used by two chrome instances in parallel.
This is reproducible in chromedriver:2.15
我正在使用chromedriver 2.12.301324并且没有这个问题。
答案 4 :(得分:0)
这是由ChromeDriver的并行执行引起的。可能发生“未能写入第一次运行文件”或“无法创建默认配置文件目录”的其他错误。
我的解决方案是指定选项 user-data-dir 。两个并发的Chromedriver不应该使用相同的用户数据目录。
chromeOptions.AddArgument("--user-data-dir=C:\\tmp\\chromeprofiles\\profile" + someKindOfIdOrIndex);
您当然可以根据需要更改路径:)
答案 5 :(得分:0)
我清除了C盘中的temp文件夹,问题已解决。
答案 6 :(得分:-1)
这是由于C:Drive中的空间问题引起的。
清除C盘中的一些空间,以便浏览器可以创建临时文件夹和个人资料。