2012-11-15 70 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