HTMLAgilityPack SelectNodes para seleccionar todos <img> elementos

c# html html-agility-pack regex xpath

Pregunta

Estoy haciendo un proyecto en C # que es básicamente un raspador de pantalla de imagen para un juego relacionado con la búsqueda de imágenes. Estoy tratando de usar HTMLAgilityPack para seleccionar todos los elementos de la imagen y colocarlos en un HTMLNodeCollection, como este:

//set up for checking autos

HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");

foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

Tenga en cuenta que urls es una colección pública de listas:

//set up for checking autos

HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");

foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

Mi bucle foreach está lanzando una excepción:

Referencia a objeto no establecida como instancia de un objeto.

Comprobando los autos, efectivamente , imgs es nulo. ¿Hay alguna forma mejor de localizar el origen de este problema? No tengo idea si es mi Xpath o qué.

La parte más frustrante es que ya lo había hecho funcionar, pero arruiné las versiones de mis archivos y perdí mi trabajo. Derp.

Respuesta aceptada

Es posible que tenga un error tipográfico en la siguiente línea:

HtmlAttribute src = img.Attributes["@src"];

Conseguí que esto funcionara para mí (note la posición @):

HtmlAttribute src = img.Attributes["@src"];

Respuesta popular

Esto funciona para mi Creo que su documento no está cargado correctamente, por lo tanto, la xpath no devuelve coincidencias.

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml("<html><head></head><body><div><img /><div><img /><img/></div></div><img/></body></html>");

var nodes = htmlDocument.DocumentNode.SelectNodes("//img");
// 4 nodes found
foreach (var node in nodes)
{
    // do stuff
}



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é