Partage
  • Partager sur Facebook
  • Partager sur Twitter

connexion automatique

GreaseMonkey

Sujet résolu
    26 avril 2009 à 17:34:55

    Bonjour a tous!

    Voila j'ai un site sur lequel je voudrais me connecter automatiquement a chaque fois que je tombe dessus.

    J'utilise donc GreaseMonkey(qui permet d'effectuer des scrips JS sur la page ou on est). Je l'ai paramétré pour que mon script s'execute sur la page en question mais j'ai des problemes.

    Voici le formulaire:
    <form id="pc" name="pc" action="#">
    			<input name="username" type="text" size="14" style="margin-right:8px" title="input1" />
    			<input name="password" type="password" size="14" title="input2" />
    			<input id="cond" name="cond" type="checkbox" />
    			<input id="remenber" name="remenber" type="checkbox" />
    			<input type='submit' id="submitpc" value='Connexion !' onclick="return ctrl.dosubmit()" class="btn">
    		</form>
    


    et voici un petit morceau de script que je tente d'utiliser mais je ne comprends pas son comportement

    if (window.document.forms["pc"].cond.checked)
    	{
    		alert('Bouton coché');
    	}
    	else{
    		alert('Bouton non coché');
    	}
    


    Ce code n'affiche strictement rien...
    je precise que c'est la seule chose sur la page et que je sais que le script s'execute bien(j'ai testé avec un simple alert et ca a fonctionné niquel)

    Merci de m'eclairer sur ce point
    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2009 à 18:58:19

      Alors, j'ai utilisé vite fait GreaseMonkey récemment, et j'ai déjà eu ce genre de problème...

      Je crois que c'est dû au fait que tu appelles les éléments avant qu'ils ne soient chargés...

      Donc j'ai deux idées qui me viennent...

      La première :

      window.onload=function() {
      if (window.document.forms["pc"].cond.checked)
      	{
      		alert('Bouton coché');
      	}
      	else{
      		alert('Bouton non coché');
      	}
      };
      



      ... et la deuxième...

      (function() {
      if (window.document.forms["pc"].cond.checked)
      	{
      		alert('Bouton coché');
      	}
      	else{
      		alert('Bouton non coché');
      	}
      })();
      



      Si aucune des deux ne fonctionnent, je ne suis plus en mesure de t'aider :p
      • Partager sur Facebook
      • Partager sur Twitter
        26 avril 2009 à 19:19:15

        pas mieux :s

        au passage on peut exclure la possibilité d'une erreur de syntaxe?
        (je debute en JS)
        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2009 à 19:27:20

          Non en effet on ne peut pas l'exclure... et apparemment, ça vient de ça.

          Vu que ton checkbox a un id, inutile de se compliquer la vie :

          if (document.getElementById("cond").checked)
          	{
          		alert('Bouton coché');
          	}
          	else{
          		alert('Bouton non coché');
          	}
          
          • Partager sur Facebook
          • Partager sur Twitter
            26 avril 2009 à 19:32:39

            parfait!
            la ca fonctionne.
            En revanche , si je n'avais pas eu d'ID a ce champ j'aurais du proceder comment?
            (eh oui les input text n'en ont pas...)

            qu'est ce qui n'allait pas dans ce que j'avais ecrit?
            • Partager sur Facebook
            • Partager sur Twitter
              26 avril 2009 à 19:37:42

              Bah, la façon dont tu l'avais écrit, c'est un peu une vieille syntaxe je crois...

              Quand il n'y a pas d'id, tu peux récupérer des éléments du document avec... document.getElementsByTagName("le tag"); .
              Par exemple, mais aussi les childNodes(), firstChild(), lastChild(), etc.


              Les méthodes du DOM quoi.
              • Partager sur Facebook
              • Partager sur Twitter
                26 avril 2009 à 19:43:03

                j'ai aussi du apprendre ce que je connais du JS sur des vieux sites(ce que je trouvais via google :) )

                bon je vais essayer de continuer ce script^^(il me reste a trouver comment valider le formulaire^^)

                EDIT: une derniere question
                si jamais dans le document.getElementsByTagName("le tag"); plusieurs input on le meme name. Ca ne va pas s'appliquer? ca va s'appliquer au premier? ou au deux?
                • Partager sur Facebook
                • Partager sur Twitter
                  26 avril 2009 à 20:24:41

                  // Alors, petite mise au point :
                  var inp = document.getElementsByTagName("input");
                  // inp contient maintenant un tableau de tous les éléments "input" de la page
                  


                  inp[0], c'est le premier input, inp[1] c'est le deuxième, etc.

                  Si tu ne veux que les input text, tu peux faire...

                  var inp = document.getElementsByTagName("input"); // TOUS les input
                  var inp_txt = []; // Un tableau vide
                  for(var i=0,l=inp.length;i<l;i++) { // Pour chaque input
                    if(inp[i].type=="text") { // S'il est de type="text"
                      inp_txt.push(inp[i]); // on l'ajoute au tableau créé
                    }
                  }
                  // inp_txt est maintenant un tableau de tous les éléments input text du document...
                  


                  Tu comprends ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 avril 2009 à 20:28:32

                    @Golmote : tu peux m'expliquer pourquoi ça aurait mieux marché avec des closures ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 avril 2009 à 20:39:17

                      @xavier, je sais pas trop... c'est comme ça qu'ils montrent :
                      http://www.journaldunet.com/developpeu [...] ntation.shtml

                      Et du coup, c'est aussi comme ça que j'ai fait les quelques scripts quand j'ai testé le log....
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 avril 2009 à 20:48:49

                        je me suis un peu rensigné et j'ai utilisé le getElementsByName et ca marche

                        maintenant c'est pour valider le form que je galere.
                        j'ai essayé
                        document.getElementById("submitpc").submit();
                        mais j'ai pas de changements visibles

                        le truc c'est que j'ai l'impression que le formulaire est deja activé en JS donc il faut que je trouve une solution pour activer le JS deja sur la page...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 avril 2009 à 20:53:34

                          document.getElementById("pc").submit();
                          

                          C'est le formulaire que tu envois... pas le bouton >_<
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 avril 2009 à 20:57:17

                            bien vu!
                            mais bon comme je pensais le formulaire en lui meme est bidon
                            en fait le clic sur le bouton appelle un autre script js qui recupere les info et les renvoie sur la vraie page...

                            la fonction appelée c'est onclick="return ctrl.dosubmit()"
                            mais je sais pas trop d'ou ca vient et surtout, comment la rapeller moi meme...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 avril 2009 à 21:01:34

                              Bah... t'as le lien du site en question ?


                              (Soit dit en passant, il paraît que getElementsByName() c'est pas super... m'enfin j'en sais trop rien...)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 avril 2009 à 21:08:35

                                Bah... essaie ça :

                                if(ctrl.dosubmit()) {
                                document.getElementById("pc").submit();
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 avril 2009 à 21:15:07

                                  nah ca passe pas
                                  en fait c'est justement ca le probleme

                                  le submit de pc marche mais c'est pas le but recherché
                                  quand on clique normalement on apelle un autre script qui lui envoie vers la vraie page
                                  la le form est juste un simple GET qui te renvoie sur la meme page et qui ne traite rien

                                  faut reussir a appeler justement la "dosubmit"
                                  mais je sais pas comment
                                  ctrl.dosubmit() ne marche pas tout seul
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 avril 2009 à 21:38:38

                                    Ca devrait fonctionner pourtant...

                                    Si tu fais juste un alert(ctrl); ça donne quoi ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 avril 2009 à 21:44:16

                                      ca donne rien
                                      il me remplit mes champs il me coche les cases mais le alert(ctrl); ne passe pas
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        26 avril 2009 à 22:09:26

                                        Et alert(controller); ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          26 avril 2009 à 23:10:48

                                          Je viens de regarder avec un peu plus d'attention le code...

                                          Et j'ai bidouillé un truc... mais je suis franchement pas sûr que ça va fonctionner...

                                          Alors alors :

                                          function k(v){
                                          	return!!((typeof v!='undefined')&&(v!=null));
                                          }
                                          
                                          function inputByName(f,n) {
                                          	var els = f.getElementsByTagName("input");
                                          	for(var i=0,l=els.length;i<l;i++) {
                                          		if(els[i].name==n) {
                                          			return els[i];
                                          		}
                                          	}
                                          	return false;
                                          }
                                          
                                          function yop() {
                                          	var portal = document.getElementById("portal");
                                          	var pc = document.getElementById("pc");
                                          	for(var i=0,el=pc.getElementsByTagName("input"),l=el.length;i<l;i++) {
                                          		if(k(inputByName(portal,el[i].name))) {
                                          			inputByName(portal,el[i].name).value = el[i].value;
                                          		}
                                          	}
                                          	for(var i=0,el=pc.getElementsByTagName("select"),l=el.length;i<l;i++) {
                                          		if(k(inputByName(portal,el[i].name))) {
                                          			inputByName(portal,el[i].name).value = el[i].options[el[i].selectedIndex].value;
                                          		}
                                          	}
                                          	if(inputByName(pc,"cond").checked==true) {
                                          		var arr = unescape(inputByName(portal,"userurl").value).split(';'),
                                          		str='',
                                          		i,
                                          		length=arr.length;
                                          		arr[1]=inputByName(portal,"accessType").value;
                                          		for(i=0;i<length;++i){
                                          			str+=(i==0?'':';')+arr[i];
                                          		}
                                          		/*if(inputByName(pc,"remenber").checked==false){
                                          			date=new Date;
                                          			date.setMonth(date.getMonth()+0);
                                          			ecrire_cookie("neuf_login","",date);
                                          			ecrire_cookie("choix_iphone","",date)
                                          		};
                                          		if(inputByName(pc,"remenber").checked==true){
                                          			date=new Date;
                                          			date.setMonth(date.getMonth()+1);
                                          			ecrire_cookie("neuf_login",pc.username.value,date);
                                          		};*/
                                          		inputByName(portal,"userurl").value=str;
                                          		portal.submit();
                                          	}
                                          	return false;
                                          }
                                          




                                          Et tu devrais pouvoir lancer la validation du formulaire simplement grâce à la fonction yop();


                                          Quelques petites notes :
                                          • Je ne garantis absolument pas que ça va marcher vu comment j'ai bidouillé...
                                          • Si ça ne marche pas, je te conseille de faire des alert() un peu partout pour voir où ça coince...
                                          • Ca ne marchera pas si ton Nom d'Utilisateur contient "@ozoneparis.net"
                                          • Et enfin, les deux conditions en commentaire testent la case à cocher "Se souvenir de mon identifiant". Vu que tu fais un script de connexion automatique, ça sert à rien en théorie. Et ça m'arrange, parce que j'avais pas envie de dénicher l'emplacement de la définition de la fonction ecrireCookie()... Bref.



                                          Voilà... en espérant que ça fonctionne, sans trop de conviction...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 avril 2009 à 23:20:00

                                            Bon il me crée une URL qui a l'air correcte et il me recharge bien la page. maintenant pour tester je doit attendre qu'il me redemande les mot de passe

                                            par contre ta methode renvoie false, c'est normal?
                                            EDIT: ah oui c'est normal j'avais pas vu le retunr true XD
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 avril 2009 à 23:23:41

                                              Arf, on s'en fiche en fait...

                                              J'ai mis return false car en gros, j'ai recopié la fonction du script d'origine mais en la rendant à peu près viable... au départ, c'était ça :
                                              function ak(){
                                              	for(var am=0,an=ac[a6].elements,af=an.length;am<af;++am){
                                              		switch(an[am].tagName){
                                              			case 'INPUT':
                                              				if(k(ad[an[am].name]))
                                              					ad[an[am].name].value=an[am].value;
                                              			break;
                                              			case 'SELECT':
                                              				if(k(ad[an[am].name]))
                                              					ad[an[am].name].value=an[am].options[an[am].selectedIndex].value;
                                              			break;
                                              			default:
                                              		}
                                              	};
                                              	if(ac[a6].cond.checked==true){
                                              		var arr=unescape(ad['userurl'].value).split(';'),
                                              		str='',
                                              		i,
                                              		length=arr.length;
                                              		if(ad.username.value.indexOf('@ozoneparis.net')>-1){
                                              			ad.password.value=b64MD5(ad.password.value);
                                              			arr[1]='ozone';
                                              		}else{
                                              			arr[1]=ad.accessType.value;
                                              		};
                                              		
                                              		for(i=0;i<length;++i){
                                              			str+=(i==0?'':';')+arr[i]
                                              		};
                                              		if(ac[a6].remenber.checked==false){
                                              			date=new Date;
                                              			date.setMonth(date.getMonth()+0);
                                              			ecrire_cookie("neuf_login","",date);
                                              			ecrire_cookie("choix_iphone","",date)
                                              		};
                                              		if(ac[a6].remenber.checked==true){
                                              			date=new Date;date.setMonth(date.getMonth()+1);
                                              			ecrire_cookie("neuf_login",ac[a6].username.value,date);
                                              			if(a6==aa){
                                              				ecrire_cookie("choix_iphone",ac[a6].accessType.selectedIndex,date)
                                              			}
                                              		};
                                              		ad['userurl'].value=str;
                                              		ad.submit();
                                              	}else{
                                              		alert('Veuillez accepter les termes et conditions d\'utilisation');
                                              	};
                                              	return false;
                                              };
                                              


                                              ... ^^ Et donc j'ai laissé le return false (qui au départ servait à empêcher le submit du vrai formulaire).

                                              Bref, je pense que tu peux supprimer le return si tu veux ^^





                                              EDIT : Tu parles de quel return true ??? o_O
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                26 avril 2009 à 23:28:50

                                                XD je voulais mettre false. bon bah normalement demain matin je te dit si ca marche.
                                                Si c'est le cas ca va etre bien pratique!
                                                je rajouterais quelques trucs(pasque la il tourne en boucle si je l'arrete pas) donc faudra que je passe par la detection de l'url...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  27 avril 2009 à 6:47:53

                                                  ca marche niquel!
                                                  merci beaucoup!!!

                                                  maintenant je vais m'arranger pour les options. Merci encore!
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    27 avril 2009 à 10:50:23

                                                    Yiha ! :D C'est plutôt incroyable que ça fonctionne, mais c'est une bonne nouvelle. :)

                                                    Ravi d'avoir pu t'aider.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      27 avril 2009 à 13:33:15

                                                      Veni, vidi, vichi once again :p
                                                      Pense à mettre le sujet en résolu ;)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        27 avril 2009 à 14:24:45

                                                        C'est pas déjà fait ? ^^

                                                        Sur ce coup-là, j'y croyais franchement pas...
                                                        Le code était imbouffable...
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        connexion automatique

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown