C# - 获取呈现 html 与 Selenium 一起使用的代码

C# - Get Rendered html Code Using With Selenium

我在控制台应用程序中通过 NuGet 包安装了 WebDriver of Selenium
Selenium.WebDriver v3.141.0
下面是一些使用 Internet Explorer 请求网站的示例代码,让它呈现并最终保存最终的 HTML 标记。

public class WebSiteHtmlLoader : IDisposable
{
    private readonly RemoteWebDriver _remoteWebDriver;

    public WebSiteHtmlLoader(RemoteWebDriver remoteWebDriver)
    {
        if (remoteWebDriver == null) throw new ArgumentNullException("remoteWebDriver");
        _remoteWebDriver = remoteWebDriver;
    }

    public string GetRenderedHtml(Uri webSiteUri)
    {
        if (webSiteUri == null) throw new ArgumentNullException("webSiteUri");
        _remoteWebDriver.Navigate().GoToUrl(webSiteUri);

        return _remoteWebDriver.PageSource;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (_remoteWebDriver != null)
            {
                _remoteWebDriver.Quit();
            }
        }
    }
}

用法:

class Program
{
    static void Main(string[] args)
    {
        if (!args.Any())
        {
            return;
        }

        var pageUrl = args.First();
        var options = new InternetExplorerOptions
        {
            IntroduceInstabilityByIgnoringProtectedModeSettings = true,
            PageLoadStrategy = InternetExplorerPageLoadStrategy.Eager
        };

        using (var htmlLoader = new WebSiteHtmlLoader(new InternetExplorerDriver(options)))
        {
            var html = htmlLoader.GetRenderedHtml(new Uri(pageUrl, UriKind.Absolute));
            File.WriteAllText(@"C:\htmlloadertext.html", html);
        }
    }
}

问题是这些代码已被删除。
我也有这样的错误:

The name 'InternetExplorerPageLoadStrategy' does not exist in the current context

chrome 或 FireFox 的更新和可用代码是什么?


编辑 1 :
当我删除此行时:

PageLoadStrategy = InternetExplorerPageLoadStrategy.Eager

我收到以下错误:

An unhandled exception of type 'OpenQA.Selenium.DriverServiceNotFoundException' occurred in WebDriver.dll


编辑 2 :
将这些代码更改为使用 chrome 而不是 IE 后出现错误。
这是代码:

  class Program
    {
        static void Main(string[] args)
        {
            var pageUrl = "https://mempool.space";
            var options = new ChromeOptions();
            //options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
            options.PageLoadStrategy = PageLoadStrategy.Eager;
            using (var htmlLoader = new WebSiteHtmlLoader(new ChromeDriver(options)))
            {
                var html = htmlLoader.GetRenderedHtml(new Uri(pageUrl, UriKind.Absolute));
                File.WriteAllText(@"C:\htmlloadertext.html", html);
            }
        }
    }

这里是错误:

An unhandled exception of type 'OpenQA.Selenium.DriverServiceNotFoundException' occurred in WebDriver.dll

使用上面的示例,我将您的 Program.Main 更改为

    static void Main(string[] args)
    {
        if (!args.Any())
        {
            return;
        }

        var pageUrl = args.First();
        var options = new ChromeOptions()
        {
            PageLoadStrategy = PageLoadStrategy.Eager
        };

        using (var htmlLoader = new WebSiteHtmlLoader(new ChromeDriver(options)))
        {
            var html = htmlLoader.GetRenderedHtml(new Uri(pageUrl, UriKind.Absolute));
            File.WriteAllText(@"C:\htmlloadertext.html", html);
        }
    }

它运行良好,我使用的库是

  <PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
  <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="92.0.4515.10700"/>

并且您需要在您的 PC 上安装 Chrome 的 v92。我能够将 https:\google.com 提取到指定的文件