未知错误:无法写入prefs文件以加载多个chrome配置文件

时间:2015-12-05 16:12:00

标签: c# selenium-webdriver selenium-chromedriver

我很难同时尝试加载多个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");

                    });

7 个答案:

答案 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盘中的一些空间,以便浏览器可以创建临时文件夹和个人资料。