【问题标题】:FirefoxWebdriver No data is available for encoding 437FirefoxWebdriver 没有数据可用于编码 437
【发布时间】:2019-06-28 07:32:34
【问题描述】:

我想创建一个 FirefoxWebdriver 但收到以下错误

  Message: 
    Initialization method Sma.Ldx.Systemtest.Ui.Tests.IbaTest.TestInitialize
 threw exception. System.TypeInitializationException: The type initializer for 
'System.IO.Compression.ZipStorer' threw an exception. ---> 
System.NotSupportedException: No data is available for encoding 437. For 
information on defining a custom encoding, see the documentation for the 
Encoding.RegisterProvider method..

它是一个 netstandard2.0 库,在 dotnet core 2.2 上运行 有人可以帮忙吗?

我尝试导入 System.Text.Encoding.CodePages 并尝试使用 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance) 但这在 dotnetcore2.2 中不受支持

private static IWebDriver InitializeFirefoxDriver(bool headless, bool remote, Uri seleniumHubUri, PlatformType platform, string locale, string webDriverPath)
        {
            var options = new FirefoxOptions()
            {
                Profile = new FirefoxProfile()
                {
                    AcceptUntrustedCertificates = true,
                    AssumeUntrustedCertificateIssuer = true
                },
            };
            options.AddArgument($"--lang={locale}");
            if (headless || remote)
            {
                options.AddArgument("-headless");
            }
            options.PlatformName = platform.ToString();
            FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(webDriverPath, "geckodriver.exe");
            service.Start();
            return remote ? new RemoteWebDriver(seleniumHubUri, options) : new FirefoxDriver(service, options);
        }

我除了 Firefox 浏览器启动但得到一个编码错误。

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    添加 NuGet 包System.Text.Encoding.CodePages

    在创建 FirefoxDriver 对象之前,请执行以下操作:

     CodePagesEncodingProvider.Instance.GetEncoding(437);
     Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

    【讨论】:

    • 谢谢,这已经帮我解决了。出于好奇,您知道为什么会这样修复它吗?
    • 很遗憾,没有
    • 之所以有效,是因为 linux 没有那种 Windows 编码,所以当您运行远程浏览器时,某些操作需要 Windows 编码。一旦此代码页可用,linux 就可以使用该编码。
    • .NET Core 默认不支持大多数编码类型,而 .Net Framework 支持。因此,转换后的应用程序有时会丢失 .NET 框架中包含的编码。
    【解决方案2】:

    解决此问题的一种方法是将Selenium.WebDriver 软件包升级到 4.*。

    上下文:这是此 GitHub 问题的一个实例:https://github.com/SeleniumHQ/selenium/issues/4816。此问题已在 4.x 分支中修复,因为在该版本中导致此问题 has been removed 的依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多