C#下载完整的HTML页面

时间:2016-08-22 13:11:29

标签: c# html download scripting

对不起,如果这个问题已经得到了解答,但我花了两周多的时间在互联网上寻找解决问题的方法。 现在,我绝对不会执行最好的谷歌搜索,似乎我的问题在互联网上有几个有效的答案。但我真的尝试过我发现的每一个解决方案,没有任何积极的结果。

我想做的事情很简单,我在许多网站上成功做到了:

  • 使用WebBrowser(1)导航到网站。
  • 等待所有内容正确加载(文档已完成的事件)。
  • 使用DocumentText属性(1)下载页面。

(1):我也经常使用WebClient。

就是这样,我得到了html页面,无论如何我都可以利用它。问题出在一个特定的网站上,尽管使用了我发现的所有不同的解决方案,但我无法获得完整的内容。我怀疑在获取完整内容之前,此页面可能需要加载多个脚本。再一次,我读到WebBrowser在触发"之前运行所有必需的脚本。已完成"事件,显然,这不是问题。我查询的页面是:http://www.coolmod#com/tarjetas-graficas-nvidia-pci-express

我试过,之后WebBrowser加载整个页面,使用GetElementByID属性查找随机元素,并检查是否得到null结果。看来,当我尝试获取不属于产品列表的元素时,我很成功。但是,每当我尝试获取属于列表的元素时,我总是得到一个null。这意味着,它自己没有加载的列表。我真的不知道为什么。顺便说一下,我没有阻止WebBrowser。 Navigate()从提供多个响应,我允许它提供尽可能多的反馈,但仍然,即使我通过cookie,产品列表也不会加载。我甚至尝试复制文档的所有内容并将其粘贴到剪贴板中。这是我尝试做的一个简单示例:

    private void catalogueDownload()
    {
        System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser();
        wb.ScriptErrorsSuppressed = true;
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Catalogue_DocumentCompleted);
        wb.Navigate("http://www.coolmod.com/tarjetas-graficas-nvidia-pci-express");
    }
    public void Catalogue_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var wb = sender as System.Windows.Forms.WebBrowser;
        string output = wb.DocumentText;
        File.WriteAllText("testing.html", output);
    }

感谢您放弃阅读所有这些内容的时间。

1 个答案:

答案 0 :(得分:1)

System.Windows.Forms.WebBrowser有点过时,如果我是你,我会考虑使用外部库,Selenium将是我的第一选择,因为它具有所有必要的集成。 .NET Framework(以及许多其他语言)