So erhalten Sie dynamisch geladenen Inhalt mit HtmlAgilityPack

c# html-agility-pack

Frage

Ich habe versucht, etwas HTML von unserer Zentralbank mit HtmlAgilityPack zu extrahieren.

Hier ist ein Wochenkonto. Zweite Hälfte der Erklärung "Ein Konto gemäß der Bangladesh Bank Order 1972 ....." enthält eine Zeile "A. Goldmünze und Bullion".

Ich habe es mit folgendem Code versucht -

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

Wenn ich mit der rechten Maustaste auf die Seite klicke und auf "Quelle anzeigen" klicke, sehe ich die Zeile "A. Gold Coin and Bullion" nicht. dat.DocumentNode.InnerHtml gibt dasselbe zurück, daher wird im dat.DocumentNode.InnerHtml keine Datei geschrieben. Aber ich kann alle Informationen sehen, wenn ich auf "Element prüfen" anstelle von "Quelle anzeigen" klicke.

Wie bekomme ich diese Zeile mit HtmlAgilityPack?

Akzeptierte Antwort

Der Grund, warum Sie es nicht in der Quelle sehen können, ist, weil die gesuchten Daten nach dem ersten Download der Seite über Javascript (xhr) in Ihrem Browser geladen werden. Das HtmlAgiligyPack ist nur ein HTML-Parser und unterstützt das Ausführen von JavaScript und das Laden zusätzlicher Ressourcen nicht. Es gibt andere Möglichkeiten, dies zu tun, aber Sie müssten ein anderes Werkzeug verwenden. Dies ist wahrscheinlich ein guter Anfang:

Laden Sie ein DOM und führen Sie Javascript serverseitig mit .Net aus




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum