C# 下载asp.net网站呈现的html代码

C# 下载asp.net网站呈现的html代码,c#,asp.net,html,httpwebrequest,C#,Asp.net,Html,Httpwebrequest,我必须下载并解析一个由ASP.NET呈现的网站。如果我使用下面的代码,我只得到了一半的页面,没有呈现我需要的“内容”。我想得到完整的内容,我可以看到与Firebug或IE开发工具 我怎样才能做到这一点。我没有找到解决办法 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); StreamReader st

我必须下载并解析一个由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();
谢谢大家!

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();
    }
更新

我尝试了网络控制解决方案。但它不起作用。我在一个WPF项目中使用了以下代码,甚至没有得到网站的内容。我现在看不出我的错误

更新2

这就是我在这期间想出的密码。 但是我没有得到任何输出。我的elementCollection没有返回任何值。 如果我能以字符串的形式获取html源代码,我会很高兴并用HtmlAgilityPack解析它。 (我不想将浏览器合并到我的XMAL代码中)

对不起,让你心烦了

谢谢大家!

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控件

如果您所指的页面具有iFrame或其他动态加载机制,则仅使用HTTPWebRequest是不够的。更好的解决方案是(如果可能)使用WebBrowser控件

可能不是答案,但您可以使用该类简化代码:

WebClient client = new WebClient();
string html = client.DownloadString(URL);

可能不是答案,但您可以使用该类简化代码:

WebClient client = new WebClient();
string html = client.DownloadString(URL);

您的代码应该下载整个页面。但是,页面可能会在加载后通过JavaScript添加内容。除非您在web浏览器中实际运行该JavaScript,否则您将无法在Firebug中看到整个DOM。

您的代码应该下载整个页面。但是,页面可能会通过JavaScript添加内容除非您在web浏览器中实际运行该JavaScript,否则您将无法在Firebug中看到整个DOM。

答案可能是网站的内容是用JavaScript呈现的,可能是通过一些AJAX调用从服务器获取额外数据来构建内容。Firebug和IE开发工具w我将向您展示呈现的html代码,但如果您选择“查看源代码”,您将看到与使用代码获取的html相同的html

我会使用类似的工具来监控页面呈现时下载的内容。您可以通过模拟页面发出的AJAX请求来获取所需的内容


请注意,如果导航是通过回发进行的,则模拟浏览ASP.NET网站可能是一个b*tch,因为您需要包含所有表单元素的值(包括隐藏视图状态)当模拟点击链接时。

答案可能是网站的内容是用JavaScript呈现的——可能是通过一些AJAX调用从服务器获取额外数据来构建内容。Firebug和IE Developer工具将向您显示呈现的html代码,但如果您选择“查看源代码”,您应该会看到相同的html是您使用代码获取的

我会使用类似的工具来监控页面呈现时下载的内容。您可以通过模拟页面发出的AJAX请求来获取所需的内容

请注意,如果使用回发进行导航,则模拟浏览ASP.NET网站可能是一种错误,因为在模拟单击链接时,需要包括所有表单元素(包括隐藏视图状态)的值。

您可以尝试以下操作:

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());
}
您可以尝试以下方法:

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浏览器


我建议您使用以下渲染引擎,而不是Web浏览器


你需要更具体一些-它缺少什么?例如,我只看到其他div缺少什么?你需要更具体一些-它缺少什么?例如,我只看到其他div缺少什么,我只是用NoScript尝试了一下,而站点在没有启用NoScip的情况下没有加载任何内容。我如何解决这个问题?sternr的回答可能会有所帮助。我认为
WebBrowser
运行JavaScript(它基本上是IE的一个实例);在运行完JS后,您可能可以通过编程方式访问其DOM。我只是用NoScript尝试了一下,而站点在启用NoScipt的情况下没有加载任何内容。如何解决这个问题?Stern的回答可能会有所帮助。我认为
WebBrowser
运行JavaScript(基本上是IE的一个实例);运行完JS后,您可以通过编程方式访问它的DOM。嗨!谢谢,这是个好主意,但我认为我的技能集还没有达到那个水平,所以我想先用浏览器控件试试。嗨!谢谢,这是个好主意,但我认为我的技能集还没有达到那个水平,所以我想用首先是浏览器控件既然你说你使用WPF,你就应该使用System.Windows.Controls.WebBrowser而不是System.Windows.*Forms**.WebBrowser谢谢你的回答。我试过了,但遇到了上面提到的问题。请友好地看一下。我非常感谢你说你使用WPF,你应该使用System.Windows.Controls、 WebBrowser而不是System.Windows.**Forms**.WebBrowser谢谢您的回答。我尝试了它,但遇到了上面提到的问题。请友好并快速查看。我非常感谢它加载页面,此方法不会被调用页面加载,此方法也不会被调用