none
Faire défiler plusieurs page web RRS feed

  • Question

  • Bonjour

    Je veux charger les photos d'une suite de pages web 

    privatevoid button1_Click(object sender, EventArgs e)
            {
                for(int i =1; i <9; i++)
                {
                    webBrowser1.Navigate(pageweb(i));
                  Charger les photos de la page;       
                }
              }

    Mais je n'obtiens que les photos de la page 1, et il saute directement à la page 8 que le webBrowser affiche seule.   

    Pouvez-vous me dire pourquoi? 

    dimanche 29 juillet 2012 14:57

Toutes les réponses

  • Bonjour,

    La méthode Navigate() déclenche l'affichage de la page de manière asynchrone. C'est à dire que la fin de l'appel à la méthode Navigate() ne veut pas dire que le page soit complètement chargé.

    Vous devez donc placer le traitement de votre photo ainsi que la navigation à la page suivante dans l'événement DocumentCompleted : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.webbrowser.documentcompleted.aspx

    Cet évènement est déclenché lorsque le chargement de la page est terminé.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 29 juillet 2012 15:47
    Modérateur
  • Je ne trouve pas de solution, je ne veux pas charger les photos de chaque page web à chaque surf.
    La méthode suivante, ne marche pas:

    Boolean finChargementPageWeb=false;

            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
             {
                 finChargementPageWeb = true;
             }

      private void chargePhoto_Click(object sender, EventArgs e)
    {
    for (int i=0;i<10;i++)
    {
    WebBrowser1.Navigate(pageWeb(i));
    if ( finChargementPageWeb = true) Charger_Photos;
    }
    }

    lundi 30 juillet 2012 08:27
  • Bonjour,

    Comme indiqué par Gilles, le traitement doit-être fait dans l'évènement DocumentCompleted. Ce qui se passe actuellement est :

    - on lance le chargement d'une page
    - vous testez dans la foulée finChargemetnPageWeb qui est encore faux
    - plus tard le chargement du document se termine ce qui déclenche DocumentCompleted et passe le booléan à true
    - mais comme le test a déjà eu lieu avant rien ne se passe

    Si par contre vous appelez Charge_Photos dans DocumentCompleted, la procédure sera bien appelée quand le document aura fini d'être chargé...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    lundi 30 juillet 2012 09:22
    Modérateur
  • J'ai bien compris, mais je n'y suis pas arrivé, car si je mets
    Charge_photos;
    dans DocumentCompleted, mon webbrowser ne va t-il pas charger les photos de toutes les pages à chaque surf, et non pas quand je le lui demanderai ?

    D'autre part j'ai une boucle qui charge une suite de page web

    for (int i...) webBrowser1.navigate(pageweb(i))

    dans DocumentCompleted de quelle pageweb(i) va t-il attendre la fin du chargement ?

    lundi 30 juillet 2012 10:14
  • Vous n'êtes pas obligé de le faire toujours. Vous pouvez par exemple :

    - utiliser un booléen ou tout autre valeur pour indiquer ce que vous voulez faire quand le document est chargé
    - ajouter ou retirer le gestionnaire d'évènements qui correspond au traitement que vous voulez faire sur cette page (+=, -= cf http://msdn.microsoft.com/fr-fr/library/ms366768.aspx) pour définir un contenu de DocumentCompleted adapté à chaque situation que vous rencontrez
    - etc...

    Si vous chargez des pages les unes après l'autre c'est probablement parce que vous utilisez un contrôle visuel qui est destiné à incorporer un navigateur dans votre propre application pour une utilisation humaine alors que vous voulez juste charger des pages par programmation ? Dans ce cas WebClient ou éventuellement HttpWebRequest pourrait être plus adapté : http://msdn.microsoft.com/fr-fr/library/system.net.webclient.aspx (et définir UserAgent pour que le site "croit" qu'il s'agit bien d'un navigateur).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    lundi 30 juillet 2012 11:18
    Modérateur
  • pour récupérer les photo d'une page web il vaut mieux utiliser HTMLAgilityPack
    dimanche 1 mars 2015 02:54