capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDernière intervention 1 juin 2008
-
18 mai 2007 à 17:18
capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDerniè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 !!!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDerniè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é
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDerniè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
capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDerniè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
capo666
Messages postés35Date d'inscriptionjeudi 8 septembre 2005StatutMembreDerniè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.""