1

假设我在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;
}

应该返回“它在那里”消息,因为它在那里。但事实并非如此。我究竟做错了什么?

4

1 回答 1

3

方法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);
于 2013-07-24T20:35:41.110 回答