如何在c#中刮取使用JavaScript創建的表

c# html-agility-pack html-table webclient

我正在嘗試使用HtmlAgilityPack從網頁https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/獲取一個表格。

到目前為止我的代碼是

WebClient webClient = new WebClient();
        string page = webClient.DownloadString("https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/");

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(page);

        List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@class='list_result Result']")
                    .Descendants("tr")
                    .Skip(1)
                    .Where(tr => tr.Elements("td").Count() > 1)
                    .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
                    .ToList();

我的問題是網頁使用JavaScript創建表,當我嘗試讀取它時會拋出一個空異常,因為網頁顯示我必須啟用JavaScript。

我也嘗試過使用“GET”方法

 string Url = "https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url);
myRequest.Method = "GET";
            WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
            myResponse.Close();

結果相同。我已經在Internet Explorer中啟用了JavaScript並更改了註冊表

if (Environment.Is64BitOperatingSystem)
        Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
    else  //For 32 bit machine
        Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);

如果我使用WebBrowser組件,我可以看到網頁沒有問題,但我仍然無法讓表格列出。

一般承認的答案

F12是您在任何瀏覽器中的朋友。

選擇“網絡”選項卡,您會發現所有信息都在此文件中:

https://www.belastingdienst.nl/data/douane_wisselkoersen/wks.douane.wisselkoersen.dd201806.xml

(我想2018年7月的數據將保存在名為* .dd201807.xml的網址中)

使用C#,您需要為該URL執行GET並將其解析為XML,無需使用HtmlAgilityPack。您需要構建與當月連接的當前年份以選擇正確的URL。

Leuker kan ik het niet maken!


熱門答案

WebClient是一個http客戶端,而不是Web瀏覽器,因此它不會執行JavaScript。需要的是無頭網絡瀏覽器。有關無頭Web瀏覽器的列表,請參閱此頁面。我沒有嘗試過任何一個,所以我不能在這裡給你推薦:

C#(.NET)的無頭瀏覽器?



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因