HtmlAgilityPack si div existe

c# html-agility-pack

Question

J'utilise Html Agility Pack pour voir si des divs avec une classe et un identifiant spécifiques existent.

 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
 }

Actuellement, sinon, si devrait être vrai, mais il effectue les actions dans l'instruction if. J'ai vu ce travail correctement quand j'ai fait

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

Lorsque j'essaie de le faire à partir du site réel au lieu d'un fichier du site enregistré localement, il voit que l'ID est correct et ignore la classe. Qu'est-ce qui pourrait le faire se comporter différemment entre l'obtention du code HTML d'un fichier local et celui d'un site / périphérique externe?

Réponse populaire

Tout d’abord, je vous suggère de faire cela. Pour moi, cela a fonctionné plus rapidement que WebClient.

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

Si vous dites que cela fonctionne sur un fichier hmtl local et ne fonctionne pas lorsque le html est sur le serveur, procédez comme suit.

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

Parfois, le code source de la page est différent lorsque vous le téléchargez avec htmlweb (ou webclient), alors refaites votre xpath en utilisant ce nouveau fichier html.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow