Extraire une valeur de HTML à l'aide de HtmlAgilityPack

c# html-agility-pack xpath

Question

Je suis nouveau sur c # et htmlagilitypack et j'essaie d'obtenir la valeur de signup_form_id qui est 2079787163.

<form name="setupform" id="setupform" method="post" action="/signup/" target="_top">
<input type="hidden" name="form_type" value="blog" />
<input type="hidden" name="stage" value="" />
<input type="hidden" name="loc" value="signup" />
<input type='hidden' name='signup_form_id' value='2079787163' /><input type="hidden" id="_signup_form" name="_signup_form" value="9783b65654" />

Heres mon codage

<form name="setupform" id="setupform" method="post" action="/signup/" target="_top">
<input type="hidden" name="form_type" value="blog" />
<input type="hidden" name="stage" value="" />
<input type="hidden" name="loc" value="signup" />
<input type='hidden' name='signup_form_id' value='2079787163' /><input type="hidden" id="_signup_form" name="_signup_form" value="9783b65654" />

Je sais que quelque chose ne va vraiment pas avec mon expression xpath et que je n’ai vraiment aucune idée de cela. Une âme quelconque peut-elle donner des suggestions? Merci beaucoup!

Réponse acceptée

Tout d'abord, votre code échoue sur la ligne doc.Load , car cette méthode 'Load' ne prend pas en charge un URI, uniquement un chemin de fichier. Vous devriez utiliser la méthode Load HtmlWeb pour télécharger le code HTML.

Deuxièmement, les défauts de votre XPath:

  • tu as oublié un crochet de fermeture ]
  • il n'y a pas de formulaire dont le nom est défini sur signup_form_id

En conclusion, vous devriez modifier votre code comme suit:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var value = doc.DocumentNode.SelectSingleNode("//form[@id='setupform']");
Console.WriteLine(value.OuterHtml);

Mise à jour: C'est bien que vous ayez clarifié la question. J'ai eu une mauvaise compréhension du problème au début.

Il semble que vous recherchiez une balise d’ input , pas le form . Donc, votre XPath devrait être modifié pour correspondre à cette exigence.

Voici le code qui lit les données dont vous avez besoin:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var value = doc.DocumentNode.SelectSingleNode("//form[@id='setupform']");
Console.WriteLine(value.OuterHtml);



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