WebBrowser dans une Boucle FOR NEXT

Signaler
Messages postés
40
Date d'inscription
mercredi 27 décembre 2000
Statut
Membre
Dernière intervention
1 octobre 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Je souhaite ouvrir en boucle dans mon WebBrowser1, une page internet avec un user_id= xxxxxxx différents, cela ne me pose pas de problème.

Ce qui m'embête, c'est plutôt que la boucle fait planter le programme, même avec les SLEEP (10000)

Voici le code :

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()

Dim i As Long
Dim id As Integer
Dim Chiffre8

Randomize    ' Initialise le générateur de nombres aléatoires.
' Renvoie une valeur aléatoire comprise entre 1 et 6.
Chiffre8  = Int((99999999 * Rnd) + 1)

Label5.Caption = Chiffre8 ' Affiche dans un label le code de 8 chiffres

Call Sleep(3000) 'Pause de 3 secondes

       For i = 1 To 10 Step 1 'début de la boucle
        
        
          SetCursorPos 1030, 582 'Positionnement du curseur (X;Y)
          
         Call Sleep(10000) 'Pause de 10 Secondes
    
         WebBrowser1.Navigate "http://www.MonSite.com/add.php?user_id=" & Label5 & "" 'Ouverture du WebBrowser
            
            Call Sleep(10000) 'Pause de 10 Secondes
            
            Call Mouse_LeftClick 'Appel de la fonction Click Gauche Souris


 Next i 'Fin de la boucle
End Sub



Merci de votre aide

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Salut

Si ça plante, tu as une erreur : laquelle ? sur quelle ligne ?

Après un .Navigate, il serait bon d'interroger le Browser pour savoir s'il a terminé l'affichage :
    With WebBrowser1
        Do While .Busy
            DoEvents
        Loop
    End With

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Chiffre8 = Int((99999999 * Rnd) + 1)
ne génèrera pas un nombre entre 1 et 6 mais entre 1 et 2, Rnd ne fournissant qu'un Single entre 0 et 1.
Messages postés
40
Date d'inscription
mercredi 27 décembre 2000
Statut
Membre
Dernière intervention
1 octobre 2010

Je vais tester ton code avec le webBrowser et je te redis cela !

Sinon pour
Chiffre8 = Int((99999999 * Rnd) + 1) 

il me génrère un chiffre de 8 caractères : 24589651 ou 458921548 par exemple
Messages postés
40
Date d'inscription
mercredi 27 décembre 2000
Statut
Membre
Dernière intervention
1 octobre 2010

En effet, ton code améliore un peu mon programme au niveau de l'attente, mais c'est encore trop rapide, les pauses ne sont pas assez longues.

While compteur < Text1.Text     'début de la boucle"

        compteur = compteur + 1

        DoEvents
        
          SetCursorPos 1030, 582 'Positionnement du curseur (X;Y)
          
        DoEvents

         WebBrowser1.Navigate "http://www.SiteWeb.com/add.php?user_id=" & Label5 & "" 'Ouverture du WebBrowser
            
          ' boucle qui permet de faire une petite pause au WebBrowser
           With WebBrowser1
        Do While .Busy
            DoEvents
        Loop
            End With
          ' Fin de cette boucle
          
          
            Call Mouse_LeftClick 'Appel de la fonction Click Gauche Souris

        SetCursorPos 800, 285
        
    Wend 'Fin de la boucle
 
End Sub


Je voudrais faire une pause de 2 secondes, puis continuer l'instruction suivante ..
Ne pas utiliser SLEEP (2000) puisque ceci fige le programme pendant 2 secondes, ce qui fait que la page dans le WebBrowser1 ne n'affiche pas pendant 2 secondes, et donc ma boucle plante.

Ya pas un moyen de jouer avec un Timer1 pour faire une pause ? J'avais entendu parler de GetTickCount
Merci de votre solution.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Mille excuses pour le Rnd, je n'avais pas les yeux en face des trous : je n'avais pas vu le coefficient multiplicateur (faut que je change de lunettes)

En effet, Sleep met en sommeil le code et doit bloquer le Refresh de la page.
Pour faire de l'attente, <voir cette source>
Messages postés
40
Date d'inscription
mercredi 27 décembre 2000
Statut
Membre
Dernière intervention
1 octobre 2010

Merci de la source,

donc une partie de mon code doit ressembler à cela :

SetCursorPos 1030, 582 'Positionnement du curseur (X;Y)
    
            Do While Abs(DateDiff("s", MaDate, Now)) < 5
                      DoEvents
            WebBrowser1.Navigate "http://www.skyrock.com/m/friends/amis_add.php?user_id=" & Label5 & "" 'Ouverture du WebBrowser
            
            Loop
            
             Call Mouse_LeftClick 'Appel de la fonction Click Gauche Souris
          
             SetCursorPos 800, 285
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Non, le plus simple est de créer une Sub qui servira de sablier :
Sub Sablier(Durée As Integer)
    ' le code avec le Do-DoEvents-Loop
End Sub

et dans ton code, l'appeler comme tu le fais avec Sleep :
Call Sablier(5) ' pour attendre 5 secondes

Mais rappelle toi que, après un Navigate, il faut toujours faire une boucle d'attente avec le .Busy, les temps de chargement étant variables.