Extraiga un valor de html utilizando HtmlAgilityPack

c# html-agility-pack xpath

Pregunta

Soy nuevo en c # y htmlagilitypack y he estado intentando obtener el valor de signup_form_id que es 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 mi codificación

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

Sé que algo está realmente mal con mi expresión xpath y no tengo ni idea de esto. ¿Puede algún tipo de alma dar algunas sugerencias? ¡Muchas gracias!

Respuesta aceptada

En primer lugar, su código falla en la línea doc.Load , porque ese método de 'Carga' no admite un URI, solo una ruta de archivo. Debe usar el método de Load HtmlWeb para descargar el HTML.

Segundo, las fallas en tu XPath:

  • olvidaste un corchete de cierre ]
  • no hay forma con el nombre establecido en signup_form_id

En conclusión, debes modificar tu código de la siguiente manera:

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

Actualización: Es bueno que hayas aclarado la pregunta; Tuve un mal entendimiento del problema inicialmente.

Parece que estás buscando una etiqueta de input , no el form . Por lo tanto, su XPath debe modificarse para que coincida con este requisito.

Aquí está el código que lee la pieza de datos que necesita:

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

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow