我正在尝试使用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 的 URL 中(
使用C#,您需要对该 URL 执行 GET 并将其解析为 XML,而无需使用 HtmlAgilityPack。您需要构建与当前月份连接的当前年份以选择正确的 URL。
Leuker kan ik het niet maken!
WebClient 是一个 http 客户端,而不是 Web 浏览器,所以它不会执行 JavaScript。需要的是一个无头的Web浏览器。有关无头 Web 浏览器的列表,请参阅此页面。不过我没有尝试过其中任何一个,所以我不能在这里给你一个建议:
C# (.NET( 的无头浏览器?