此异常是由于.Net库中的错误所致。生成配置文件的Zip的代码无法提供适当的Zip。
解决此问题的一种方法是重载
FirefoxOptions并使用.Net框架(System.IO.Compression.ZipArchive)中的存档器,而不是出现故障
ZipStorer:
var options = new FirefoxOptionsEx();options.Profile = @"C:Users...AppDataRoamingMozillaFirefoxProfilesez3krw80.Selenium";options.SetPreference("network.proxy.type", 0);var service = FirefoxDriverService.CreateDefaultService(@"C:downloads", "geckodriver.exe");var driver = new FirefoxDriver(service, options, TimeSpan.FromMinutes(1));class FirefoxOptionsEx : FirefoxOptions { public new string Profile { get; set; } public override ICapabilities ToCapabilities() { var capabilities = (DesiredCapabilities)base.ToCapabilities(); var options = (IDictionary)capabilities.GetCapability("moz:firefoxOptions"); var mstream = new MemoryStream(); using (var archive = new ZipArchive(mstream, ZipArchiveMode.Create, true)) { foreach (string file in Directory.EnumerateFiles(Profile, "*", SearchOption.AllDirectories)) { string name = file.Substring(Profile.Length + 1).Replace('\', '/'); if (name != "parent.lock") { using (Stream src = File.OpenRead(file), dest = archive.CreateEntry(name).Open()) src.CopyTo(dest); } } } options["profile"] = Convert.Tobase64String(mstream.GetBuffer(), 0, (int)mstream.Length); return capabilities; }}
并通过名称获取配置文件的目录:
var manager = new FirefoxProfileManager();var profiles = (Dictionary<string, string>)manager.GetType() .GetField("profiles", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(manager);string directory;if (profiles.TryGetValue("Selenium", out directory)) options.Profile = directory;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)