¿Cómo puedo raspar una tabla que se crea con JavaScript en c #

c# html-agility-pack html-table webclient

Pregunta

Estoy tratando de obtener una tabla de la página web https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/ utilizando HtmlAgilityPack.

Mi código hasta ahora es

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();

Mi problema es que la página web crea la tabla mediante JavaScript y cuando intento leerla, se produce una excepción nula porque la página web muestra que debo habilitar JavaScript.

También intenté usar el método "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();

Con los mismos resultados. Ya habilito JavaScript en Internet Explorer y cambio el registro también

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);

Si uso un componente WebBrowser, puedo ver la página web sin problemas, pero aún no puedo ver la tabla en la lista.

Respuesta aceptada

F12 es tu amigo en cualquier navegador.

Seleccione la pestaña Red y notará que toda la información está en este archivo:

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

(Supongo que los datos de julio de 2018 se guardarán en una URL llamada * .dd201807.xml)

Usando C #, necesitará hacer un GET para esa URL y analizarlo como XML, sin necesidad de usar HtmlAgilityPack. Necesitará construir el año actual concatenado con el mes actual para elegir la URL correcta.

Leuker kan ik het niet maken!


Respuesta popular

WebClient es un cliente http, no un navegador web, por lo que no ejecuta JavaScript. Lo que se necesita es un navegador web sin cabeza . Ver esta página para una lista de navegadores web sin cabeza. No he probado ninguno de ellos, así que no puedo darte una recomendación aquí:

¿Navegador sin cabeza para C # (.NET)?



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué