使用HtmlAgilityPack,驗證網頁上的元素是否存在


假設我在http://google.com上 ,並且我想驗證頁面上是否存在id="hplogo"的元素(存在,它是Google徽標)。

我想使用HtmlAgilityPack,所以我寫這樣的東西:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml("http://google.com");
    var foo = (from bar in doc.DocumentNode.DescendantNodes()
               where bar.GetAttributeValue("id", null) == "hplogo"
               select bar).FirstOrDefault();
    if (foo == null)
    {
        HasSucceeded = 1;
        MessageBox.Show("not there");
    }
    else
    {
        MessageBox.Show("it's there");
    }
    return HasSucceeded;
}

哪個應該返回“它在那裡”的消息,因為它在那裡。但事實並非如此。我究竟做錯了什麼?

一般承認的答案

方法LoadHtml(html)加載字符串,其中包含用於解析的html內容。這不是要加載的資源的URL。因此,您正在加載字符串"http://google.com"並嘗試在其中查找徽標。這當然不會給你帶來結果。

您可以使用WebClient下載資源內容:

WebClient client = new WebClient();
string html = client.DownloadString("http://google.com");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因