WebBrowser dans une Boucle FOR NEXT

cs_booba27100 Messages postés 40 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 1 octobre 2010 - 22 juin 2010 à 18:27
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 24 juin 2010 à 10:38
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 19:33
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 19:35
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.
0
cs_booba27100 Messages postés 40 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 1 octobre 2010
23 juin 2010 à 06:25
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
0
cs_booba27100 Messages postés 40 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 1 octobre 2010
23 juin 2010 à 06:34
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juin 2010 à 12:27
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>
0
cs_booba27100 Messages postés 40 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 1 octobre 2010
23 juin 2010 à 19:05
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 juin 2010 à 10:38
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.
0
Rejoignez-nous