如何在 c# 中抓取使用 JavaScript 创建的 table

How can I scrape a table that is created with JavaScript in c#

我正在尝试使用 HtmlAgilityPack 从网页 https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/ 获取 table。

到目前为止我的代码是

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 创建了 table,当我尝试读取它时它抛出了空异常,因为该网页显示我必须启用 [=29] =].

我也试过用"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 组件,我可以毫无问题地查看网页,但我仍然无法列出 table。

F12 是您在任何浏览器中的朋友。

Select 网络选项卡,您会注意到所有信息都在此文件中:

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

(我想 2018 年 7 月的数据将保存在名为 *.dd201807.xml 的 url 中)

使用 C#,您需要为 URL 执行 GET 并将其解析为 XML,无需使用 HtmlAgilityPack。您需要构建与当前月份相连的当前年份以选择正确的 URL.

Leuker kan ik het niet maken!

WebClient 是一个 http 客户端,不是网络浏览器,所以它不会执行 JavaScript。需要的是 headless 网络浏览器。请参阅此页面以获取无头 Web 浏览器列表。不过我没有尝试过任何一个,所以我不能在这里给你推荐:

Headless browser for C# (.NET)?