我正在尝试使用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创建了表格,当我尝试读取该表格时,它抛出了null异常,因为该网页显示我必须启用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组件,则可以毫无问题地看到网页,但仍然无法将表列出。
答案 0 :(得分:2)
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!
答案 1 :(得分:0)
WebClient是http客户端,而不是Web浏览器,因此它不会执行JavaScript。需要一个 headless 网络浏览器。请参阅此页面以获取无头Web浏览器的列表。不过我还没有尝试过,所以在这里我不能给你推荐: