C# 如果存在div,则HtmlAgilityPack

C# 如果存在div,则HtmlAgilityPack,c#,html-agility-pack,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(); do

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

doc.Load(“c:\\somelocaldest\\page.htm”)


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

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

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(target);
如果您说这在本地hmtl文件上有效,而在服务器上使用html时不起作用,那么请执行以下操作

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

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

尝试使用诸如Fiddler之类的工具查看在线情况。可能存在许多上下文差异(编码、用户代理、标题、重定向、cookie、引用等),您是对的。它正在下载我认为是从服务器下载的页面。然后,当jquery从服务器返回状态时,我要查找的类将通过jquery进行更改。我读到的是LED是开还是关,所以默认情况下它们都是关的,当它获得状态时,它会根据需要打开它们。我需要在当前状态下抓取页面。我很高兴能帮助您:)我曾多次面临此问题。我正在试图找到一种方法,使其保持原样。我想把它放在一个网络浏览器中,然后从中提取文档文本。我认为重写xpath更好,它更容易,程序也会更快。如果新html的输出让您感到困惑,那么使用html美化器使html更具可读性。你可以在谷歌上找到很多html美化工具,阅读html不是问题。它得到的是正确的html。我所做的每件事都是在我知道一些指示灯亮起时,给我所有指示灯都熄灭的html。