htmlagilitypack xpath no funciona

c# html-agility-pack xpath

Pregunta

Tengo un problema que mi xpath no funciona.

Estoy tratando de obtener la url del siguiente enlace de Google.com en la parte inferior.

Pero no puedo alcanzar en url usando Xpath.

Por favor ayúdame a corregir mi xpath. También dime, ¿qué debería estar en el lugar de?

HtmlWeb hw = new HtmlWeb();

HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=seo");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id='pnnext']");

foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.Attributes["href"];
    MessageBox.Show(link.Value );
}

Respuesta aceptada

Lo extraño aquí es que de alguna manera HtmlAgilityPack no reconoce el atributo id del enlace "Siguiente".

Esto podría ser un error en HtmlAgilityPack; Puedes publicarlo en el HAP Issue Tracker .

Sin embargo, mientras tanto encontré esta solución:

  • encuentre la tabla que contiene los elementos de paginación (la tabla con id="nav" ). Para este elemento la identificación se reconoce correctamente.
  • tome la primera (y solo tr ) en la tabla y la última td de ella (usando la función XPath last() )
  • tomar la a elemento dentro de la td hemos obtenido en el paso anterior.

Larga historia corta, aquí está el código:

var doc = new HtmlWeb().Load("http://www.google.com/search?q=seo");

var nextLink = doc.DocumentNode
    .SelectSingleNode("//table[@id='nav']/tr/td[last()]/a");

Console.WriteLine(nextLink.GetAttribute("href", "err"));

Actualizar

Después del comentario de Simon, revisé esto nuevamente y la conclusión es que no se trata de un error en el paquete de agilidad HTML; el atributo id="pnnext" solo está presente cuando la solicitud es realizada por un navegador (tal vez dependiendo del valor del encabezado UserAgent ). Cuando se realiza un HttpWebRequest desde el código, así es como aparece el enlace "Siguiente" en la salida:

<a href="/search?q=seo&amp;hl=en&amp;ie=UTF-8&amp[...]" style="text-align:left">


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué