Cómo obtener contenido cargado dinámicamente usando HtmlAgilityPack

c# html-agility-pack

Pregunta

Estaba tratando de extraer algunos html de nuestro banco central usando HtmlAgilityPack.

Aquí está una cuenta semanal. La segunda mitad del Estado de cuenta "Una cuenta de conformidad con la orden bancaria de Bangladesh 1972 ....." contiene una línea "A. Moneda de oro y lingotes".

He intentado con el siguiente código -

var get = new HtmlWeb();
for (int i = 1; i < 8284; i++)
{
    var dat = get.Load("https://www.bb.org.bd/pub/weekly/staffair/state_affairs.php?prId=" + i);
    var htm = dat.DocumentNode.InnerHtml;
    if (htm.Contains("Gold Coin and Bullion"))
    {
       File.WriteAllText(@"C:\Test\" + i + ".txt", htm);
       Console.WriteLine(i + " written");
    }
}

Si hago clic con el botón derecho en la página y hago clic en "Ver código fuente", no veo la línea "A. Moneda de oro y lingotes". dat.DocumentNode.InnerHtml devuelve lo mismo, como resultado No hay ningún archivo escrito en la carpeta de prueba. Pero puedo ver toda la información si hago clic en "Inspeccionar elemento" en lugar de "Ver origen".

¿Cómo obtener esa línea usando HtmlAgilityPack?

Respuesta aceptada

La razón por la que no puede verlo en la fuente es porque los datos que busca se cargan a través de javascript (xhr) dentro de su navegador después de la descarga inicial de la página. El HtmlAgiligyPack es solo un analizador de HTML y no es compatible con ejecutar javascript y cargar recursos adicionales. Hay otras formas de hacer esto, pero necesitaría usar otra herramienta. Este es probablemente un buen lugar para comenzar:

Cargue un DOM y ejecute javascript, del lado del servidor, con .Net



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é