Estrarre un valore da html utilizzando HtmlAgilityPack

c# html-agility-pack xpath

Domanda

Im new to c # e htmlagilitypack e ho cercato di ottenere il valore di signup_form_id che è 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" />

Ecco la mia codifica

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

So che c'è qualcosa di veramente sbagliato nella mia espressione xpath e sono davvero all'oscuro di questo. Può qualche anima gentile dare qualche suggerimento? Molte grazie!

Risposta accettata

Innanzitutto, il codice non funziona sulla riga doc.Load , poiché il metodo "Load" non supporta un URI, ma solo un percorso file. Dovresti usare il metodo Load HtmlWeb per scaricare l'HTML.

Secondo, i difetti del tuo XPath:

  • hai dimenticato una parentesi di chiusura ]
  • non esiste un modulo con il nome impostato su signup_form_id

In conclusione, dovresti modificare il tuo codice come segue:

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

Aggiornamento: è bene che tu abbia chiarito la domanda; Inizialmente avevo avuto una comprensione sbagliata del problema.

Sembra che tu stia cercando un tag di input , non il form . Quindi, il tuo XPath dovrebbe essere modificato per soddisfare questo requisito.

Ecco il codice che legge i dati che ti servono:

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow