下载由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();
    }

下载由asp.net网站呈现的HTML代码

如果你引用的页面有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

相关文章: