Con HtmlAgilityPack, verifique que el elemento en la página web existe

c# dom html-agility-pack

Pregunta

Digamos que estoy en http://google.com , y quiero verificar que existe un elemento con id="hplogo" que existe en la página (que es el logotipo de Google).

Quiero usar HtmlAgilityPack, entonces escribo algo como esto:

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml("http://google.com");
    var foo = (from bar in doc.DocumentNode.DescendantNodes()
               where bar.GetAttributeValue("id", null) == "hplogo"
               select bar).FirstOrDefault();
    if (foo == null)
    {
        HasSucceeded = 1;
        MessageBox.Show("not there");
    }
    else
    {
        MessageBox.Show("it's there");
    }
    return HasSucceeded;
}

Lo que debería devolver el mensaje "está ahí" porque está ahí. Pero no es así. ¿Qué estoy haciendo mal?

Respuesta aceptada

El método LoadHtml(html) carga la cadena, que contiene contenido html para analizar. Esta no es la url del recurso a cargar. Así que estás cargando la cadena "http://google.com" e intentando encontrar un logotipo en ella. Lo que por supuesto no te da resultado allí .

Puede utilizar WebClient para descargar contenido de recursos:

WebClient client = new WebClient();
string html = client.DownloadString("http://google.com");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);


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é