0

我正在使用 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 应该为真,但它正在执行 if 语句中的操作。当我这样做时,我已经正确地看到了这项工作

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

当我尝试从实际站点而不是站点的本地保存文件执行此操作时,它将看到 id 是正确的并忽略类。是什么导致它在获取本地文件的 html 和从外部站点/设备获取 html 时表现不同?

4

1 回答 1

1

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

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

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

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

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

于 2013-06-06T12:55:58.660 回答