Extrahiere einen Wert aus HTML mit HtmlAgilityPack

c# html-agility-pack xpath

Frage

Ich bin neu zu c # und htmlagilitypack und ich habe versucht, den Wert von signup_form_id zu erhalten, der 2079787163 ist

<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 meine Codierung

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("https://signup.wordpress.com/signup/");
var value = doc.DocumentNode.SelectSingleNode("//form[@name='signup_form_id'");
Console.WriteLine(value.InnerText);

Ich weiß, dass etwas mit meinem XPath-Ausdruck wirklich falsch ist und ich wirklich keine Ahnung davon habe. Kann irgendeine Art Seele einige Vorschläge geben? Danke vielmals!

Akzeptierte Antwort

Zuallererst schlägt Ihr Code in der doc.Load Zeile fehl, weil diese Load-Methode keinen URI unterstützt, sondern nur einen Dateipfad. Sie sollten die Load Methode von HtmlWeb verwenden, um den HTML- HtmlWeb herunterzuladen.

Zweitens, die Fehler in Ihrem XPath:

  • du hast eine schließende Klammer vergessen ]
  • Es gibt kein Formular mit dem Namen " signup_form_id

Abschließend sollten Sie Ihren Code wie folgt ändern:

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);

Update: Es ist gut, dass Sie die Frage geklärt haben; Ich hatte anfangs ein falsches Verständnis für das Problem.

Es sieht so aus, als ob Sie nach einem input Tag suchen, nicht nach dem form . Daher sollte Ihr XPath geändert werden, um diese Anforderung zu erfüllen.

Hier ist der Code, der die Daten liest, die Sie benötigen:

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

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

var signupFormIdElement = doc.DocumentNode
    .SelectSingleNode("//input[@name='signup_form_id']");

var signupFormId = signupFormIdElement.GetAttributeValue("value", "");

Console.WriteLine(signupFormId);


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum