我正在尝试从我的网站获取html字符串,因为它在浏览器中显示
首先我尝试使用网络客户端
using (var client = new WebClient())
{
var content = client.DownloadString("my_site_address");
}
但在我的网站上我有一些改变视图的javascript代码(而webClient不运行javascript)
所以我使用wpf WebBrowser并在nevigate到欲望网站后显示页面(正如预期的那样)但是当我尝试获取html字符串时它就像webClient一样显示
dynamic doc = MainBrowser.Document;
var htmlText = doc.documentElement.InnerHtml;
这就是我得到html的方式:
<!DOCTYPE html>
<head>
<title>Title</title>
</head>
<body>
<div class="conteiner">
<div class="matrix">
<script type="text/javascript">
// some script code
</script>
<script type="text/javascript" src="xxx"></script>
<a href="Matrix/index.html">Matrix</a>
</div>
<div class="zoom">
<a href="zoom/index.html">Zoom</a>
</div>
</div>
<div class="test">
<script type="text/javascript">
// some script code
</script>
<script type="text/javascript" src"xxx2"></script>
</div>
</body>
</html>
这就是我应该在javascript更改之后得到它:
<html><head>
<title>Title</title>
</head>
<body>
<div class="conteiner">
<div class="matrix">
<script type="text/javascript">
</script>
<script type="text/javascript" src="xxx"></script><iframe ></iframe><script ></script><div ><div ><iframe >
<html><head>
<title></title>
</head>
<body>
<div >
<ul><li><ol><li <a </a></li></ol></li></ul> </div>
</body></html>
</iframe></div></div></div>
<a href="Matrix/index.html">Matrix </a>
</div>
<div class="zoom">
<a href="zoom/index.html">Zoom</a>
</div>
</div>
<div class="test">
<script type="text/javascript">
</script>
<script type="text/javascript" src="xxx2"></script><div ><div ><div ><iframe ></iframe></div></div></div>
</div>
</body></html>
请帮助:)
答案 0 :(得分:0)
您可以使用WebDriver中的Selenium框架。它提供不同的Web驱动程序实现,例如Internet Explorer或Firefox。
以下是使用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);
}
}
}
答案 1 :(得分:-2)
您可以尝试使用WebBrowser.DocumentText属性。比如,向应用程序添加一个隐藏的WebBrowser控件并调用Navigate()函数,然后调用该属性以获取生成的HTML 更多信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documenttext.aspx