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 提取到指定的文件
我在控制台应用程序中通过 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 提取到指定的文件