Comment puis-je gratter une table créée avec JavaScript en c #

c# html-agility-pack html-table webclient

Question

J'essaie d'obtenir une table de la page Web https://www.belastingdienst.nl/rekenhulpen/wisselkoersen/ en utilisant HtmlAgilityPack.

Mon code jusqu'ici est

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

Mon problème est que la page Web crée la table à l'aide de JavaScript et que, lorsque j'essaie de la lire, elle génère une exception null, car la page Web indique que je dois activer JavaScript.

J'ai aussi essayé d'utiliser la méthode "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();

avec les mêmes résultats. J'active déjà JavaScript dans Internet Explorer et change également de registre

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 j'utilise un composant WebBrowser, je peux voir la page Web sans problème, mais je ne parviens toujours pas à afficher le tableau.

Réponse acceptée

F12 est votre ami dans n'importe quel navigateur.

Sélectionnez l'onglet Réseau et vous remarquerez que toutes les informations sont dans ce fichier:

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

(Je suppose que les données pour juillet 2018 seront stockées dans une URL nommée * .dd201807.xml)

En utilisant C #, vous aurez besoin de faire un GET pour cette URL et de l’analyser en XML, pas besoin d’utiliser HtmlAgilityPack. Vous devrez construire l'année en cours concaténée avec le mois en cours pour choisir la bonne URL.

Leuker kan ik het niet maken!


Réponse populaire

WebClient est un client http, pas un navigateur Web, il n'exécutera donc pas JavaScript. Ce qu'il faut, c'est un navigateur Web sans tête . Voir cette page pour une liste de navigateurs Web sans tête. Cependant, je n’ai essayé aucune d’entre elles, je ne peux donc pas vous recommander ici:

Navigateur sans tête pour C # (.NET)?



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow