Readystate ! [Résolu]

capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention - 18 mai 2007 à 17:18 - Dernière réponse : capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention
- 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"
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 20 mai 2007 à 01:09
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 18 mai 2007 à 20:26
0
Merci
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)
Commenter la réponse de cs_Jack
capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention - 18 mai 2007 à 20:32
0
Merci
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é
Commenter la réponse de capo666
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 19 mai 2007 à 16:43
0
Merci
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 !
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 19 mai 2007 à 17:08
0
Merci
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)
Commenter la réponse de cs_Jack
capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention - 19 mai 2007 à 19:44
0
Merci
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
Commenter la réponse de capo666
capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention - 19 mai 2007 à 19:46
0
Merci
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
Commenter la réponse de capo666
capo666 35 Messages postés jeudi 8 septembre 2005Date d'inscription 1 juin 2008 Dernière intervention - 20 mai 2007 à 03:43
0
Merci
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 ;-)
Commenter la réponse de capo666

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.