下载由asp.net网站呈现的HTML代码
本文关键字:HTML 代码 网站 asp net 下载 | 更新日期: 2023-09-27 18:04:37
我必须下载和解析一个网站,这是由ASP.NET呈现。如果我使用下面的代码,我只能得到一半的页面,而没有我需要的渲染"内容"。我想获得完整的内容,我可以看到Firebug或IE开发人员工具。
我该怎么做呢?我没有找到解决办法。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string code = streamReader.ReadToEnd();
谢谢!
我尝试了webcontrol解决方案。但这并没有奏效。我在一个WPF项目和使用以下代码,甚至没有得到一个网站的内容。我现在不明白我的错误。
System.Windows.Forms.WebBrowser webBrowser = new System.Windows.Forms.WebBrowser();
Uri uri = new Uri(myAdress);
webBrowser.AllowNavigation = true;
webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
webBrowser.Navigate(uri);
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
System.Windows.Forms.WebBrowser wb = sender as System.Windows.Forms.WebBrowser;
string tmp = wb.DocumentText;
}
更新2
这是我在此期间想出的代码。但是我没有得到任何输出。我的elementCollection不返回任何值。如果我能得到html源作为一个字符串,我会很高兴和解析它与HtmlAgilityPack。(我不想把浏览器合并到我的xml代码中)
对不起,让你心烦了!谢谢!
WebBrowser wb = new WebBrowser();
wb.Source = new Uri(MyURL);
HTMLDocument doc = (HTMLDocument)wb.Document;
IHTMLElementCollection elementCollection = doc.getElementsByName("body");
foreach (IHTMLElementCollection element in elementCollection)
{
tb.Text = element.toString();
}
如果你引用的页面有iframe或其他动态加载机制,使用HTTPWebRequest是不够的。一个更好的解决方案是(如果可能的话)使用WebBrowser控件
答案可能是网站的内容是用JavaScript呈现的——可能是用一些AJAX调用从服务器获取额外的数据来构建内容。Firebug和IE Developer Tool会显示渲染的html代码,但是如果你选择"查看源代码",你应该会看到与你用代码获取的相同的html。
我会使用像Fiddler Web Debugger这样的工具来监控页面在呈现时下载的内容。您可以通过模拟页面发出的AJAX请求来获得所需的内容。
请注意,它可以是一个b*tch来模拟浏览ASP。如果导航是通过post - back进行的,因为当模拟单击链接时,您需要包含所有表单元素的值(包括隐藏的视图状态)。
可能不是答案,但是您可以使用WebClient类来简化您的代码:
WebClient client = new WebClient();
string html = client.DownloadString(URL);
您的代码应该下载整个页面。但是,页面可以通过JavaScript在加载后添加内容。除非你真的在web浏览器中运行,否则你不会看到Firebug中看到的整个DOM。
你可以试试:
public override void Render(HtmlTextWriter writer):
{
StringBuilder renderedOutput = new StringBuilder();
Streamwriter strWriter = new StringWriter(renderedOutput);
HtmlTextWriter tWriter = new HtmlTextWriter(strWriter);
base.Render(tWriter);
string html = tWriter.InnerWriter.ToString();
string filename = Server.MapPath(".") + "''data.txt";
outputStream = new FileStream(filename, FileMode.Create);
StreamWriter sWriter = new StreamWriter(outputStream);
sWriter.Write(renderedOutput.ToString());
sWriter.Flush();
//render for output
writer.Write(renderedOutput.ToString());
}
我建议你使用下面的渲染引擎而不是Web浏览器
https://github.com/cefsharp/CefSharp