如果div存在,则为HtmlAgilityPack

时间:2013-06-05 19:15:51

标签: c# html-agility-pack

我正在使用Html Agility Pack查看是否存在具有特定类和ID的div。

 string target = "http://192.168.3.230/index.htm";
 WebClient client = new WebClient();
 string html = client.DownloadString(target);
 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
 doc.LoadHtml(html);

 if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledoff']") != null){
      //actions in here
 }

 else if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledon']") != null)
 {
      //actions in here
 }

目前else if应该为true,但它正在if语句中执行操作。 我做的时候,我已经看到了这项工作

doc.Load("c:\\somelocaldest\\page.htm");

当我尝试从实际网站而不是本地保存的网站文件中执行此操作时,它将看到ID正确并忽略该类。什么可能导致它在获取本地文件的html和外部站点/设备之间的行为方式不同?

1 个答案:

答案 0 :(得分:1)

首先,我建议你这样做,对我而言,它比WebClient工作得更快。

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(target);

如果你说这适用于本地hmtl文件而且当html在服务器上时不起作用,那么请执行以下操作。

File.WriteAllText(path,doc.DocumentNode.OuterHtml);

有时页面的源代码在使用htmlweb(或webclient)下载时会有所不同,所以请使用这个新的html文件再次创建xpath。