none
Récupérer des données affichées par script RRS feed

  • Question

  • Bonjour tout le monde,

    J'ai posé quelques questions avec un webBrowser dans le forum Visual C#, mais là il y a des données à récupérer sur un serveur, donc si il y a un forum dédié au développément web j'imagine que là ça s'applique.

    Des données sont mises à ma disposition par un serveur sur une page authentifiée, et je voudrais les enregistrer.

    J'ai écrit une application WinForm avec un webBrowser, ça y est l'authentification fonctionne, à présent je m'intéresse à récupérer les données. Donc je les ai cherchées dans webBrowser.Document.Body, ah oui mais pas de pot : rien n'apparaît sur la page tant que je n'ai pas activé les scripts, et ce qui est retourné par webBrowser.Document.Body est le code source de la page avant l'exécution du script (même si c'est appelé après et que les données sont bien présentes à l'écran).

    Est-ce qu'on a un moyen de connaître la valeur des éléments HTML après l'exécution du script ?

    Ou est-ce qu'il faudra que j'injecte un script inspiré du premier, mais qui m'écrive les données dans un fichier ? Dans ce dernier cas faudra-t-il prendre des précautions pour obtenir les autorisations ?

    Pour pouvoir exécuter le script d'origine j'ai ajouté ceci dans la source du formulaire :

        [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        [System.Runtime.InteropServices.ComVisibleAttribute(true)]
        public partial class Form1 : Form



    • Modifié Gloops dimanche 17 janvier 2016 20:39
    dimanche 17 janvier 2016 20:14

Réponses

  • Bonjour,

    Finalement il y avait bien plus simple.

    webBrowser1_DocumentCompleted s'exécute à la fin du chargement initial de la page, moyennant quoi il fournit le contenu ... initial.

    A ce stade les fonctions Ajax ne sont pas encore exécutées.

    Lorsqu'elles s'exécutent, elles déclenchent webBrowser1_ProgressChanged. L'ennui bien entendu avec cet événement-ci, c'est qu'il se déclenche encore assez souvent, donc il s'agit de savoir lors de l'exécution quand le moment est arrivé de lire les données.

    webBrowser1_DocumentCompleted est plus commode pour s'y retrouver, puisqu'on distingue trois ou quatre phases en fonction des différentes pages successives à afficher au cours de la procédure d'authentification. Donc à ce niveau on sait quand la bonne page est affichée, donc à ce moment on peut positionner une variable de niveau module.

    Dans webBrowser1_ProgressChanged, on va vérifier quand cette variable indique qu'on est sur la bonne page. En outre, il s'agit de recevoir des données plusieurs fois sur cette page : au moins le chargement initial, puis le chargement des données par Ajax. Pour faire la distinction on vérifiera la taille de la division dans laquelle on attend des données : lorsque la taille a augmenté, c'est que les données ont été reçues. Il pourrait se poser un cas où on doive pousser plus loin l'analyse, si le traitement par le serveur est lent et que le chargement se fait en plusieurs fois, auquel cas il faudrait alors un point de repère pour savoir quand le chargement Ajax est terminé. Dans le traitement que j'effectue actuellement, le serveur n'affiche que les données de la semaine en cours donc ça se fait en une fois.

    On a encore tendance à déclencher webBrowser1_ProgressChanged trois ou quatre fois avec les bonnes données. Si les données sont suffisamment stables ça peut très bien ne pas poser vraiment de problème, sinon on peut positionner une variable de niveau module pour dire que le traitement est déjà effectué (ou alors puisqu'on en a déjà une qu'on teste, on peut la changer une fois que le traitement est effectué.

    La phase suivante est de corriger les erreurs de syntaxe XML dans ce qui est reçu, mais ça ce n'est pas le même sujet.


    • Marqué comme réponse Gloops samedi 30 janvier 2016 17:25
    • Modifié Gloops samedi 30 janvier 2016 17:27
    samedi 30 janvier 2016 17:23