如何使用 HtmlAgilityPack 获取动态加载的内容

How to get Dynamically loaded content using HtmlAgilityPack

我试图使用 HtmlAgilityPack 从我们的中央银行提取一些 html。

Here 是每周帐户。语句 "An Account pursuant to the Bangladesh Bank Order 1972 ....." 的后半部分包含一行 "A. Gold Coin and Bullion"。

我试过以下代码 -

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

如果我右键单击页面并单击 "View source",我看不到行 "A. Gold Coin and Bullion"。 dat.DocumentNode.InnerHtml returns 同样的事情,结果测试文件夹中没有写入文件。但是如果我点击 "Inspect element" 而不是 "View source",我可以看到所有信息。

如何使用 HtmlAgilityPack 获取该行?

您在源代码中看不到它的原因是因为您要查找的数据是在初始下载页面后通过浏览器中的 javascript (xhr) 加载的。 HtmlAgiligyPack 只是一个 HTML 解析器,不支持 运行 javascript 和加载其他资源。还有其他方法可以做到这一点,但您需要使用其他工具。这可能是一个很好的起点:

Load a DOM and Execute javascript, server side, with .Net