웹 페이지 https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/에서 HtmlAgilityPack을 사용하여 테이블을 가져 오려고합니다.
지금까지 내 코드는
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 예외가 발생한다는 것입니다.
나는 또한 "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을 수행하고 HtmlAgilityPack을 사용할 필요없이 XML로 구문 분석해야합니다. 현재 달을 연결하여 현재 연도를 구성하여 올바른 URL을 선택해야합니다.
로커 커닝 중!
WebClient는 웹 브라우저가 아닌 http 클라이언트이므로 JavaScript를 실행하지 않습니다. 필요한 것은 헤드리스 웹 브라우저입니다. 헤드리스 웹 브라우저 목록은이 페이지를 참조하십시오. 나는 그들 중 어떤 것도 시도하지 않았으므로 여기에 당신에게 추천을 줄 수는 없습니다 :