HtmlAgilityPack se div esiste

c# html-agility-pack

Domanda

Sto usando Html Agility Pack per vedere se esistono div con una classe e un ID specifici.

 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
 }

Attualmente il else if dovrebbe essere vero, ma sta facendo le azioni nella dichiarazione if. Ho visto questo lavoro correttamente quando l'ho fatto

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

Quando provo a farlo dal sito reale invece di un file salvato localmente del sito, vedremo che l'id è corretto e ignorare la classe. Cosa potrebbe causare un comportamento diverso tra ottenere l'html per un file locale e da un sito / dispositivo esterno?

Risposta popolare

Prima di tutto ti suggerisco di farlo, per me ha funzionato più velocemente di WebClient.

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

Se dici che questo funziona sul file hmtl locale e non funziona quando l'html si trova sul server, fai quanto segue.

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

A volte il codice sorgente della pagina è diverso quando lo scarichi con htmlweb (o webclient), quindi rendi di nuovo xpath usando questo nuovo file html.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché