Problème de requête XPath avec HTML Agility Pack

c# html-agility-pack xpath

Question

J'essaie d'extraire le champ de prix de ce site Web à l'aide du pack d'agilité HTML.

Mon code est comme suit;

var web = new HtmlWeb();
var doc = web.Load(String.Format(overClockersURL, componentID));
var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");

J'ai obtenu la requête XPath en utilisant la fonctionnalité " Copier en tant que XPath " de Firebug.

Le problème que j'ai est que SelectSingleNode renvoie null - il ne semble pas trouver l'élément spécifié par la requête. Je suis un peu perplexe quant à pourquoi, mais je n’ai pas beaucoup d’expérience avec XPath, je souhaiterais donc avoir quelques indications sur ce que j’ai fait de mal.

Réponse acceptée

Lorsque cela se produit, vous devriez vérifier si la page est chargée correctement (vous avez dit que vous utilisiez un proxy HTTP?)

Essayez d'écrire le contenu de doc.DocumentNode.OuterHtml dans un fichier texte afin de voir si la page est chargée correctement. Peut-être que vous obtenez une page d'erreur au lieu de la page d'origine.


Réponse populaire

Si je lance ce code:

    var web = new HtmlWeb();
    var doc = web.Load("http://www.overclockers.co.uk/showproduct.php?prodid=GX-033-HS");
    var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");
    Console.WriteLine("price=" + priceContent.InnerHtml);

Il produit:

    var web = new HtmlWeb();
    var doc = web.Load("http://www.overclockers.co.uk/showproduct.php?prodid=GX-033-HS");
    var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");
    Console.WriteLine("price=" + priceContent.InnerHtml);

Cela semble donc fonctionner. Vous pouvez également utiliser //span[@id=\"prodprice\"]" ce qui est préférable car il évite toutes les balises non SPAN.




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