2012-11-15 42 views
0

我一直在网页爬行器应用程序的最后2个月使用HtmlAgilityPack,没有加载网页的问题。HtmlAgilityPack HtmlWeb.Load返回空文档

现在,当我尝试加载这个特定的网页,文档OuterHtml是空的,因此本次测试失败

var url = "http://www.prettygreen.com/"; 
var htmlWeb = new HtmlWeb(); 
var htmlDoc = htmlWeb.Load(url); 
var outerHtml = htmlDoc.DocumentNode.OuterHtml; 
Assert.AreNotEqual("", pageHtml); 

我可以从网站加载其他页面,没有任何问题,如设置

url = "http://www.prettygreen.com/news/"; 

在过去,我曾经遇到过一个编码问题,我用htmlWeb.OverrideEncoding和htmlWeb.AutoDetectEncoding来玩弄没有运气。我不知道这个网页有什么问题。

+0

尝试将您的URL字符串更改为: - @“http:\\ www.prettygreen.com \”; – Derek

+0

没有运气,System.UriFormatException:无效的URI:无法分析主机名。 – craastad

回答

9

看起来这个网站需要启用cookies。因此,为您的网络请求创建Cookie容器应该可以解决问题:

var url = "http://www.prettygreen.com/"; 
var htmlWeb = new HtmlWeb(); 
htmlWeb.PreRequest += request => 
    { 
     request.CookieContainer = new System.Net.CookieContainer(); 
     return true; 
    }; 
var htmlDoc = htmlWeb.Load(url); 
var outerHtml = htmlDoc.DocumentNode.OuterHtml; 
Assert.AreNotEqual("", outerHtml); 
+0

你将如何添加一个你已经从之前的'HttpWebRequest'中获得的cookie? – Micro

+0

@MicroR:不是100%确定,但Cookie应该在'htmlWeb'实例中可用 – Alex