未知错误:无法写入用于加载多个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实例不能同时使用同一用户数据目录。
若要使用相同的配置文件,必须将原始配置文件复制到不同的临时位置,并将该位置作为用户数据目录传递。
什么是"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驱动器中的一些空间,以便浏览器可以创建临时文件夹和配置文件。