Readystate !

Résolu
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008 - 18 mai 2007 à 17:18
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008 - 20 mai 2007 à 03:43
Salut a tous j,ai un petit problème. je vais sur un site et je remplis le formulaire et quand je click sur sur bouton suivant la page load et la je veux que mon programme continue a remplir le formulaire mais la loop traditionnel marche pas alor il esseiye de remplir pendant le load et sa me donne une erreur.

        ie = CreateObject("InternetExplorer.Application")

        ie.Visible = True
        ie.Navigate("XXXXXXXXXX")

        Do While ie.ReadyState <> 4    'ici la loop marche bien
        Loop

        For i = 1 To 10
            random1 = random1 & Chr(Int(121 - 97 + 1) * Rnd() + 97)
        Next

        ie.document.all("username").value = random1
        ie.document.all("password1").value = StrReverse(random1) & "12"
        ie.document.all("password2").value = StrReverse(random1) & "12"   'ici tout va bien aussi
        ie.document.all("terms").click()

        li_link_ctr = ie.Document.images.Length

        For li_link = 0 To li_link_ctr - 1

            a = ie.document.images(li_link).src()

            If a = "XXXXXXXXX/reg/next_fr.gif" Then
                ie.document.images(li_link).click()               'tout va bien
               
            End If
        Next

'C'est ici! il faut que jattende que la page load a cause du  ie.document.images(li_link).click()  mais si je fais un loop  While ie.ReadyState <> 4 sa ne marche pas !!!

        ie.document.all("city").value = "allo"

8 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
20 mai 2007 à 01:09
Re
J'ai (enfin) compris ton problème (ouf) : Au moment où tu cliques, l'état du IE n'a pas encore changé d'état car il n'a pas eu le temps de commencer l'action que tu lui demandes.
J'ai personnellement fait l'essai et c'est détectable :
J'ai inséré sur ma feuille :
- un WebBrowser1
- un Label1
- un Timer1
Dans le code de Timer1, j'ai mis de quoi suivre l'état de mon Webbrowser dans la fenêtre de debug :
   Static Memo As String
   Label1.Text = WebBrowser1.ReadyState.ToString
   If Memo <> WebBrowser1.ReadyState.ToString Then
      Memo = WebBrowser1.ReadyState.ToString
      Debug.Print(Memo)
   End If

Observe bien :
Quand tu appelles une URL (avec Navigate), le ReadyState passe par les états suivants :
Uninitialized, Loading, Interactive, Complete

Puis, quand tu cliques sur un bouton, les états sont :
Interactive, Complete

Donc, il te suffit de créer autant de boucle Do-Loop que tu as d'état à voir défiler :

Quand tu appelles l'URL, ce qui t'intéresse, c'est l'état final :
   Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
      Application.DoEvents()
   Loop
Ensuite, tu sais que tu vas cliquer sur un bouton, il faut attendre qu'apparaissent successivement Interactive, puis Complete :
   Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Interactive
      Application.DoEvents()
   Loop
   Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
      Application.DoEvents()
   Loop
Une fois que ces deux évènements se sont produits, tu peux à nouveau continuer à bricoler tes textes.

La prochaine fois, essaye de comprendre ce qui se passe sous tes yeux (on n'est pas au dessus de ton épaule) car si tu n'arrives pas à l'expliquer ça, tu auras du mal à trouver des réponses.

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
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
18 mai 2007 à 20:26
Salut
Et dans ta Do-Loop, est-ce que tu prenais soin de mettre un DoEvents permettant au système de s'occuper des autres tâches ?
(suggestion de ma boule de cristal)
Do While ie.ReadyState <> 4
   DoEvents
Loop
Sinon, quand tu dis "ça ne marche pas", il se passe quoi ?

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008
18 mai 2007 à 20:32
oui mais en fait je suis en vb.net alor le doevent pas oubliger ^^  le "sa marche pas" c'est que la loop est ignorer et que le readystate dit qui est deja a 4 alor il va directement à ie.document.all("city").value = "allo"
et la boum erreur car il a essaiyer de remplir le champ avant que la page soit completement chargé
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
19 mai 2007 à 16:43
Modifié le thème de la question sur .Net et pas VB6 : Comment veux-tu avoir des réponses si tu donnes des infos erronnées !
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
19 mai 2007 à 17:08
Tu racontes des cracks : Ta syntaxe n'est pas celle de .Net mais bien de VB6.
En .Net, en utilisant un objet WebBrowser :
        Try
            WebBrowser1.Navigate("http://www.live.com")
            Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
                Application.DoEvents()
            Loop
        Catch ex As Exception
            Return
        End Try

Si c'est du VB6, ravise toi
Ma boule de cristal me dit que tu essayes d'utiliser un code VB6 dans du .Net.
C'est vrai ?

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008
19 mai 2007 à 19:44
Oui mais n'empeche que ma loop marche très bien (la première) et le  Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete j,ai esseiyer  (pour mon click) et non elle est ignorer
0
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008
19 mai 2007 à 19:46
Pour l'instant j'utilsie des sleep mais bon c'est pas très propre je rapelle que ma premiere loop marche très bien c'est quand je click il faut que jattande avant de proceder a dautre remplissage je champ c'est la que la loop marche pas car readystate me dit tjs 4  mais c'est faux
0
capo666 Messages postés 35 Date d'inscription jeudi 8 septembre 2005 Statut Membre Dernière intervention 1 juin 2008
20 mai 2007 à 03:43
Ca marche à merveille merci beaucoup :-)

 ""La prochaine fois, essaye de comprendre ce qui se passe sous tes
yeux (on n'est pas au dessus de ton épaule) car si tu n'arrives pas à
l'expliquer ça, tu auras du mal à trouver des réponses.""

Oui je vais faire attention la prochaine fois ;-)
0
Rejoignez-nous