Ich verwende Html Agility Pack, um zu sehen, ob divs mit einer bestimmten Klasse und ID existieren.
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
}
Momentan sollte der else-Wert true sein, aber er führt die Aktionen in der if-Anweisung aus. Ich habe gesehen, dass dies richtig funktioniert, als ich es tat
doc.Load("c:\\somelocaldest\\page.htm");
Wenn ich versuche, es von der tatsächlichen Site anstatt von einer lokal gespeicherten Datei der Site zu machen, wird es sehen, dass die ID korrekt ist und die Klasse ignorieren. Was könnte dazu führen, dass es sich unterschiedlich verhält zwischen dem Abrufen des HTML-Codes für eine lokale Datei und von einer externen Site / einem externen Gerät?
Als erstes empfehle ich Ihnen, dies zu tun, für mich funktionierte es schneller als WebClient.
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(target);
Wenn Sie sagen, dass dies in der lokalen hmtl-Datei funktioniert und nicht funktioniert, wenn sich html auf dem Server befindet, dann tun Sie Folgendes.
File.WriteAllText(path,doc.DocumentNode.OuterHtml);
Manchmal unterscheidet sich der Quellcode der Seite, wenn Sie ihn mit htmlweb (oder webclient) herunterladen, machen Sie also Ihren xpath erneut, indem Sie diese neue html-Datei verwenden.