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

本文关键字:chrome 配置文件 文件 prefs 加载 用于 错误 未知 | 更新日期: 2023-09-27 18:25:50

我很难同时加载多个chrome配置文件,它总是显示"未知错误:无法写入prefs文件".我使用的是硒2.48.2和硒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);
}

更新:使用firefox驱动程序,它可以很好地与默认配置文件配合使用

FirefoxProfileManager profileManager = new FirefoxProfileManager();
                FirefoxProfile profile = profileManager.GetProfile("default");
Parallel.ForEach(collections, (current) =>
                    {
                        IWebDriver driver = new FirefoxDriver(profile);
                        driver.Navigate().GoToUrl("http://google.com");
                    });

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

多个chrome实例不能同时使用同一用户数据目录。

若要使用相同的配置文件,必须将原始配置文件复制到不同的临时位置,并将该位置作为用户数据目录传递。

什么是"fixture"?这个收集线程安全吗?

此外,IWebDriver/ChromeDriver不是线程安全的。

不能在Parallel.Foreach循环中执行此操作。您需要将锁置于此操作之外,但这样就不会通过使用并行来提高任何性能。Foreach。

另一个原因可能是概要文件目录(这里是"默认"目录)是一个隐藏目录,就像我的情况一样。

取消隐藏文件夹,它可能会重新开始工作

根据此链接,这是较新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,没有这个问题。

它是由ChromeDriver的并行执行引起的。可能会发生其他错误,如"写入首次运行文件失败"或"无法创建默认配置文件目录"。

我的解决方案是指定选项用户数据目录。两个并发的Chromedriver不应该使用相同的用户数据目录。

chromeOptions.AddArgument("--user-data-dir=C:''tmp''chromeprofiles''profile" + someKindOfIdOrIndex);

当然,您可以根据需要更改路径:)

我清除了C驱动器中的临时文件夹,问题解决了。

这是由于C:驱动器中的空间问题引起的。

清除C驱动器中的一些空间,以便浏览器可以创建临时文件夹和配置文件。