2017-02-01 44 views
2

我試圖使用HtmlAgilityPack從我們的中央銀行提取一些HTML。如何使用HtmlAgilityPack獲取動態加載的內容

Here是一個每週帳戶。聲明的後半部分「根據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"); 
    } 
} 

如果我在頁面上點擊右鍵,點擊「查看源文件」,我不看行「A.金幣和金條」。 dat.DocumentNode.InnerHtml返回相同的結果,因此沒有文件寫入測試文件夾。但如果點擊「檢查元素」而不是「查看源代碼」,我可以看到所有信息。

如何使用HtmlAgilityPack獲取該行?

回答

1

您無法在源代碼中看到它的原因是因爲您要查找的數據是在初次下載頁面之後通過JavaScript(xhr)在您的瀏覽器中加載的。 HtmlAgiligyPack只是一個HTML解析器,不支持運行JavaScript和加載其他資源。還有其他方法可以做到這一點,但您需要使用其他工具。這可能是一個良好的開端:

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

+0

硒與PhantomJS一起解決問題,但它會在控制檯窗口中如一些不需要的信息。 '[INFO - 2017-02-03T17:45:00.492Z] GhostDriver - 主 - 在端口上運行....'。我也嘗試過使用'SimpleBrowser.WebDriver',但它的行爲像'HtmlAgilityPack'。有什麼方法可以使用'SimpleBrowser.WebDriver'獲取所有信息? –