Avec HtmlAgilityPack, vérifiez que l'élément sur la page Web existe

c# dom html-agility-pack

Question

Disons que je suis sur http://google.com et que je veux vérifier qu'il existe un élément avec id="hplogo" sur la page (le logo Google, par exemple).

Je veux utiliser HtmlAgilityPack, alors j'écris quelque chose comme ceci:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml("http://google.com");
    var foo = (from bar in doc.DocumentNode.DescendantNodes()
               where bar.GetAttributeValue("id", null) == "hplogo"
               select bar).FirstOrDefault();
    if (foo == null)
    {
        HasSucceeded = 1;
        MessageBox.Show("not there");
    }
    else
    {
        MessageBox.Show("it's there");
    }
    return HasSucceeded;
}

Ce qui devrait renvoyer le message "c'est là" parce qu'il est là. Mais ce n'est pas le cas. Qu'est-ce que je fais mal?

Réponse acceptée

Méthode LoadHtml(html) charge une chaîne contenant du contenu HTML pour l'analyse. Ce n'est pas l'URL de la ressource à charger. Donc, vous chargez la chaîne "http://google.com" et essayez de trouver un logo. Ce qui bien sûr ne vous donne pas de résultat.

Vous pouvez utiliser WebClient pour télécharger le contenu de la ressource:

WebClient client = new WebClient();
string html = client.DownloadString("http://google.com");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi