Page 1 sur 2

COMATE et clic sur bouton image [Résolu]

Publié : mar. 17/févr./2009 11:20
par Kwai chang caine
Bonjour à tous

Je suis en train d'utiliser le splendid PBI COMATE du grand SROD 8)
Dans lequel il a ajouté une fonction d'execution de code Javascript

Ca marche nikel avec google parce que ce sont des boutons traditionels.
Mais avec une page d'identification que j'essaye d'ouvrir, bah ça marche pas parce que le bouton est une image :?

Voici le bijoux COMATE

Code : Tout sélectionner

IncludePath ".." 
XIncludeFile "COMate.pbi" 

Define.COMateObject WebObject 

Procedure.i ExecuteJavaScript(Gadget, command$) 
  Protected browser.COMateObject, documentDispatch.COMateObject, script.COMateObject 
  Protected result 
  browser = COMate_WrapCOMObject(GetWindowLong_(GadgetID(gadget), #GWL_USERDATA)) 
  If browser 
    documentDispatch = browser\GetObjectProperty("Document") 
    If documentDispatch 
      script = documentDispatch\GetObjectProperty("script") 
      If script 
        result = script\Invoke("eval('" + command$ + "')") 
        script\release() 
      EndIf  
      documentDispatch\Release() 
    EndIf 
    browser\Release() 
  EndIf 
  ProcedureReturn result 
EndProcedure 


If OpenWindow(0, 10000, 0, 0, 0, "WebGadget",  #PB_Window_SystemMenu|#PB_Window_Maximize) 
  WebGadget(0, 0, 0, WindowWidth(0)+50,WindowHeight(0)-100, "http://www.google.fr/") 

  ButtonGadget(1,50,WindowHeight(0)-50,150,25,"Fill") 
  ButtonGadget(2,250,WindowHeight(0)-50,150,25,"Send") 
   
  Repeat 
    Event = WaitWindowEvent(); 
    Select Event 
      Case #PB_Event_Gadget 
        Select EventGadget() 
          Case 1 
            xMessage$ = "Hello from PB :)" 
            ExecuteJavaScript(0,"document.all.q.value=" + Chr(34) + xMessage$ + Chr(34)) 
           Case 2
            ExecuteJavaScript(0,"document.all.btnG.click()")
            
        EndSelect 
      Case #PB_Event_CloseWindow 
        Break 
    EndSelect 
  Until GetAsyncKeyState_(#VK_ESCAPE) 
EndIf 
Je pourrais faire la methode "document.myform.submit()" qui marche parce qu'il y a qu'un seul bouton
Mais je me suis posé la question comment je ferais avec plusieurs boutons ????

Donc j'aimerais pouvoir simuler un clic sur une image comme je le fais sur un bouton classic.

Alors j'ai posé la question sur un forum javascript, et la reponse est encore plus compliquée que la question :oops:
J'vous la donne "emile"
Space Frog a écrit :un bouton image se comporte comme un bouton submit au nioveau de la soumission du formulaire et tu ne pourras pas faire autremetn que de mettre une valeur dynamiquement dans un input hidden qui te permettra de savoir quel bouton image tu as emulé ...
Alors je lui ai demandé ce qu'etais un "hidden"
Et la reponse aussi claire que la premiere m'a pas fait avancer d'un "yota" :cry:
Space Frog a écrit :un element de type hidden dans le form n'est pas visible mais est transmis avec les autres données du formulaire ...

Code :

<input type="hidden" name="origine" value="données cachées" id="orignie" />il te suffit de renseigner dynamiquement cet element:


Code :
document.getElementById('origine').value="image1"ainsi coté sreveur tu recupères :

Code :
$_POST['origine']
Alors si "quinquin" a lu le dictionnaire de javascript en entier et que pour lui c'est clair comme de l'eau de roche.....et bin si y pouvait me donner juste un verre de cette eau......parce que KCC il a drolement soif :cry:

Voici la page que je veux ouvrir

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  <html> 
    <head> 
      <title> 
       </title> 
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
      <link rel="shortcut icon" href="/images/icone.ico"> 
  <script language="javascript"> 
    if (document.layers) { 
      document.write("<link rel="stylesheet" type="text/css" href="/styles/style.css">"); 
    } else { 
      document.write("<link rel="stylesheet" type="text/css" href="/styles/style.css">"); 
    } 
  </script> 
      <script language='javascript'> 
        history.forward(); 
      </script> 
    </head> 
    <body class="login" > 
      <form action="/login" method="post" name="myform"> 
        <table width="450"> 
          <tr> 
            <td class="ariane"> 
              <div class="arianeModule"> 
                Authentification 
              </div> 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%"> 
                <tr> 
                  <td width="10" height="10"><img src="/images/bloc_a_hg.gif" width="10" height="10"></td> 
                  <td height="10" bgcolor="#B9C1ED"><img src="/images/pix.gif" width="1" height="1"></td> 
                  <td width="10" height="10"><img src="/images/bloc_a_hd.gif" width="10" height="10"></td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr class="bandeau"> 
            <td class="erreur"> 
 
              &nbsp; 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%" class="bandeau"> 
                <tr> 
                
                  <td class="premiere"> 
                    Identifiant : 
                  </td> 
                  <td> 
                  
                         <input name="login" type="text" class="input" size="30" /> 
                            
 
                  </td> 
                </tr> 
                <tr> 
                  <td class="premiere"> 
                    Mot de passe : 
                  </td> 
                  <td> 
                    <input name="password" type="password" class="input" size="30" /> 
                  </td> 
                </tr> 
                <tr> 
                  <td class="premiere"> 
                    Portail : 
                  </td> 
                  <td> 
                    <select name="portail" class="input" /> 
                      <option value="ENC"> 
                      Programmation et Pilotage des Interventions 
                      </option> 
                      <option value="PIL"> 
                      Administration et Suivi d'Activité 
                      </option> 
                    </select> 
                  </td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr class="bandeau"> 
            <td class="actions"> 
              <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
            </td> 
          </tr> 
          <tr> 
            <td> 
              <table width="100%"> 
                <tr> 
                  <td width="10" height="10"><img src="/images/bloc_a_bg.gif" width="10" height="10"></td> 
                  <td height="10" bgcolor="#B9C1ED"><img src="/images/pix.gif" width="1" height="1"></td> 
                  <td width="10" height="10"><img src="/images/bloc_a_bd.gif" width="10" height="10"></td> 
                </tr> 
              </table> 
            </td> 
          </tr> 
          <tr> 
            <td class="erreur"> 
 
            </td> 
          </tr> 
        </table> 
      </form> 
      <script language="JavaScript">document.myform.login.focus();</script>        
    </body> 
  </html>
Merci beaucoup de votre aide
J'ai pas encore demandé sur le forum US parceque si je rajoute encore l'anglais ..... :cry:

Publié : mar. 17/févr./2009 11:42
par djes
A priori, si tu nommes correctement tes boutons, il te suffit de changer la ligne

Code : Tout sélectionner

ExecuteJavaScript(0,"document.all.btnG.click()") 
pour simuler le click. Là tu cliques "btnG" mais tu devrais pouvoir mettre n'importe quel autre nom de bouton.

Publié : mar. 17/févr./2009 11:43
par Le Soldat Inconnu
ben il faut associer chaque bouton à une fonction javascript différente.

Laisse tombé le paramètre caché, pour moi, c'est une connerie. un paramètre caché (input hidden) permet de mémoriser une info précédente mais sans qu'elle soit visible.
Dans le genre, page 1 du formulaire
nom prénom
donc 2 input
page 2
adresse
mais pour ne pas perdre nom prénom, je remets des input masqué dans le formulaire qui contienne ces valeurs
donc quand je fais mon submit, je n'envoi pas que l'adresse, mais j'envoi nom prénom adresse

Publié : mar. 17/févr./2009 11:54
par Kwai chang caine
Merci les copains de votre rapidité, KCC y sue toute l'eau de son corp :cry:
A priori, si tu nommes correctement tes boutons, il te suffit de changer la ligne Code:
ExecuteJavaScript(0,"document.all.btnG.click()")
pour simuler le click. Là tu cliques "btnG" mais tu devrais pouvoir mettre n'importe quel autre nom de bouton.
Et ben nom, c'est ça qu'est dingue ça marche pour les boutons normaux mais pas sur une image que l'on clique dessus :?

J'ai essayé sans succes :

Code : Tout sélectionner

document.myform.login.click()
document.post.login.click()
document.all.image.click()
Bien sur comme je l'ai dit document.myform.submit() marche puisque je suppose que c'est comme si je faisais RETURN.

Mais moi, je voulais trouver comment faire un clic, comme ça la prochaine fois que je tombe sur 2 ou plus de ces saloperie d'image bouton et bin je peux cliquer dessus comme sur un bouton normal
Laisse tombé le paramètre caché, pour moi, c'est une connerie. un paramètre caché (input hidden) permet de mémoriser une info précédente mais sans qu'elle soit visible.
Ca tombe bien, j'ai rien compris
J'ai rajouté ces lignes dans la page mais rien de mieux.
Puis il a pas du comprendre que je pilotais une page par un programme.
C'est vrai c'est dur a expliquer ça.

C'est pour ça que je reviens vers la famille qui comprend mieux ce que je veux faire
Mais c'est vrai que le javascript et le WEB, y'en a pas beaucoup qui le manipule je pense....alors voila, j'suis avec deux chaise assis au milieu donc par terre :cry:

Publié : mar. 17/févr./2009 12:05
par djes
Ah oui j'ai compris. Ton bouton image est un bouton pour valider ton formulaire. En ce sens il a la même fonction qu'un "submit" classique, toujours au sein d'un formulaire. Tu peux avoir plusieurs formulaires dans une page web, que tu nommes, et que tu peux valider comme ça : monform1.submit(), monform2.submit().
Si tu peux cliquer sur une autre image (qui n'est pas dans un formulaire), il s'agit en général d'un lien. Ca n'a donc rien à voir!

Publié : mar. 17/févr./2009 12:10
par Kwai chang caine
Alors comment faire pour simuler un click sur cette image ???
Comme si c'etait un bouton

Car maintenant de plus en plus de page on une image a la place d'un bouton classique :?

Publié : mar. 17/févr./2009 12:38
par Cls
En essayant ceci ? (non testé)

Code : Tout sélectionner

document.getElementsByTagName('input')[2].click();
Pas le temps de regarder plus, j'ai un déjeuner dans 20min :?

Publié : mar. 17/févr./2009 13:07
par Kwai chang caine
Bonjour CLS content de te parler aussi :D
Mange tranquillement et des que t'as une idée oublie pas KCC qui est dans le KK et tout KC :D

Alors la, avec toute cette brochette de "WEBeur" pour aider KCC, on va pouvoir faire un barbecue :D et faire griller cette saucisse de bouton image :lol:

Bon j'ai essayé ce que tu as donné et encore plus

Code : Tout sélectionner

Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('input')[2].click();") 
Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('input').click();") 

Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('login').click();") 
Debug ExecuteJavaScript(#WebGadget, "document.getElementsByTagName('login')[2].click();") 
et rien ne se passe meme pas de message d'erreur.
En retour j'ai -2147024809
A mon avis c'est pas bien ça un retour negatif :roll:

Publié : mar. 17/févr./2009 14:00
par djes
Mais euuuuuuh! Tu viens de le dire toi-même! Comme l'image sert à valider un formulaire, il suffit de faire un document.myform.submit() pour valider comme si tu avais cliqué dessus!!! C'est pas plus compliqué que ça...

Publié : mar. 17/févr./2009 14:08
par Cls
djes a écrit :Mais euuuuuuh! Tu viens de le dire toi-même! Comme l'image sert à valider un formulaire, il suffit de faire un document.myform.submit() pour valider comme si tu avais cliqué dessus!!! C'est pas plus compliqué que ça...

Code : Tout sélectionner

document.myform.submit()
Ça n'a pas déjà été essayé ?

Publié : mar. 17/févr./2009 14:16
par Kwai chang caine
Si si mes amis et ça marche. :D

Mais moi je voulais simuler le clic, comme sur le bouton envoyer du forum purebasic par exemple.

Quand je regarde le source du forum quand on ecrit un message a ses copains :D
Pourquoi on peut simuler un clic sur le bouton

Code : Tout sélectionner

<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="Envoyer" />
Et qu'on peut pas sur cette saloperie de bouton image ??? :?

Code : Tout sélectionner

 <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
Je veux simuler le clic, car je sais que va y avoir d'autres pages avec ce genre d'image qui servent de bouton, et je preferais m'entrainer sur une page simple comme celle la :D

Publié : mar. 17/févr./2009 14:26
par djes
Kwai chang caine a écrit :Si si mes amis et ça marche. :D

Mais moi je voulais simuler le clic, comme sur le bouton envoyer du forum purebasic par exemple.

Quand je regarde le source du forum quand on ecrit un message a ses copains :D
Pourquoi on peut simuler un clic sur le bouton

Code : Tout sélectionner

<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="Envoyer" />
Et qu'on peut pas sur cette saloperie de bouton image ??? :?

Code : Tout sélectionner

 <input type="image" src="/images/bt_valider_bleu1024.gif" value="login" /> 
Je veux simuler le clic, car je sais que va y avoir d'autres pages avec ce genre d'image qui servent de bouton, et je preferais m'entrainer sur une page simple comme celle la :D
Je pense que l'objet img n'a pas de méthode click, contrairement à l'objet bouton. Ou alors elle n'est pas implémentée sur ton navigateur. Ou alors, l'image n'est pas bien référencée.

Publié : mar. 17/févr./2009 14:28
par Cls
Je pense que la différence vient de l'attribut "name" qui est initialisé dans le premier cas et qui ne l'est pas dans le second.

Edit : En fait djes semble avoir raison. Voilà ce que j'ai trouvé : http://www.aliasdmc.fr/dom_javascript_h ... click.html

Publié : mar. 17/févr./2009 14:35
par Kwai chang caine
Donc j'suis cuit aux olives :?

ça veut dire que si un jour je tombe sur une page qui a une dizaine de ces cochonneries.......et bah tintin......... la balayette j'lai bien ou j'pense :?

Si au moins j'pouvais avoir la position de cet element dans la page je pourrais envoyer la souris et cliquer avec PB :D

Publié : mar. 17/févr./2009 14:37
par Cls
Pourquoi ?

Tu ne peux avoir qu'un seul "input type=image" par formulaire. Mais tu peux avoir plusieurs formulaires par page. Donc la solution document.forms.le_nom_du_formulaire.submit() marchera à tous les coups ;)