[Resolu]Un script qui active un "bouton moderne"

Un script qui active un "bouton moderne" [Resolu] - VB/VBA/VBS - Programmation

Marsh Posté le 16-12-2015 à 13:04:22    

Bonjour,
 
J'aimerai automatiser l'appui sur le bouton vert qu'on voit à droite sur l'image ci-dessous à l'aide d'uns script VBS (HTA) :
(Quand je fais "inspecter l'élément, c'est la ligne <label></label> qui est en surbrillance...)
 
https://lh3.googleusercontent.com/-cwf_9HBYsRA/VnFR1bWgeeI/AAAAAAAADRM/m76dc_dVdSY/s800-Ic42/Activate%252520DMZ.jpg
 
Malheureusement je n'ai AUCUNE idée de par ou prendre le truc... pouvez-vous SVP m'orienter ?
 
Voici mon draft
 

Code :
  1. 'Login bbox
  2. Dim objWshShell,IE
  3. Set objWshShell = Wscript.CreateObject("Wscript.Shell" )
  4. Set IE = CreateObject("InternetExplorer.Application" )
  5. With IE
  6.   .Visible = True
  7.   .Navigate "http://192.168.1.254"
  8. 'Wait for Browser
  9.   Do While .Busy
  10.     WScript.Sleep 100
  11.   Loop
  12. .Document.getElementsByName("password" ).Item(0).Value = "MyPassword"
  13. .Document.Forms(0).submit 'Cette ligne ne fonctionne pas pour l'instant
  14. Do While .Busy
  15.     WScript.Sleep 100
  16.   Loop
  17.   .Navigate "http://192.168.1.254/natpat.html"
  18.  .Document.getElementsByID("rule-activation-1" ).Item(0).Checked = True ' Ne fonctionne pas
  19. Do While .Busy
  20.     WScript.Sleep 100
  21.   Loop
  22. End With


Message édité par unisev le 22-12-2015 à 09:49:36
Reply

Marsh Posté le 16-12-2015 à 13:04:22   

Reply

Marsh Posté le 17-12-2015 à 10:09:00    

Je me demande si ça serait pas plus simple à faire avec un outil comme AutoIt ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-12-2015 à 14:47:33    

Je pense que ce "bouton" est "surveillé" par du Javascript, il doit y avoir un "eventhandler" ou quelque chose comme ça quelque part dans le code de la page. Désactive donc le JS dans ton navigateur et regarde si ça fonctionne toujours (ou si la page change d'apparence). Si c'est bien du JS faut regarder le code de près et voir ce qu'il fait pour voir si c'est possible d'imiter ça en VBS.

 

edit: Dans ta fenêtre Explorateur DOM il y a un tab Événmts (événements, à droite), ça dit quoi quand tu cliques dessus?

Message cité 1 fois
Message édité par rat de combat le 17-12-2015 à 14:52:46
Reply

Marsh Posté le 17-12-2015 à 23:09:38    

rufo a écrit :

Je me demande si ça serait pas plus simple à faire avec un outil comme AutoIt ?


 
Je connais pas encore, quel serait l'avantage de cet outil ?
 

rat de combat a écrit :

Je pense que ce "bouton" est "surveillé" par du Javascript, il doit y avoir un "eventhandler" ou quelque chose comme ça quelque part dans le code de la page. Désactive donc le JS dans ton navigateur et regarde si ça fonctionne toujours (ou si la page change d'apparence). Si c'est bien du JS faut regarder le code de près et voir ce qu'il fait pour voir si c'est possible d'imiter ça en VBS.
 
edit: Dans ta fenêtre Explorateur DOM il y a un tab Événmts (événements, à droite), ça dit quoi quand tu cliques dessus?


 
Ca dit ça :
https://lh3.googleusercontent.com/--N4nAILttik/VnMyfnLtJGI/AAAAAAAADR4/Y7-qpxHy6tw/s800-Ic42/Events.jpg

Reply

Marsh Posté le 17-12-2015 à 23:14:08    

unisev a écrit :


 
Je connais pas encore, quel serait l'avantage de cet outil ?
 


AutoIt permet de simuler des actions faites par une personne sur l'IHM : déplacement de souris, envoi de touches clavier... Ca pourrait donc remplacer les actions que tu ferais, toi, dans l'IHM.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-12-2015 à 23:28:49    

Ok mais est-il plus simple ou mieux documenté que le VBS ?
Ce soft a-t-il une fonction de "Capture" de "macro" ? pourquoi s'en sortirait-il mieux ?
 
Je suis en train de le tester et l'IDE ne me fait pas rêver...

Reply

Marsh Posté le 18-12-2015 à 09:38:57    

Le langage est proche du VB/VBA. L'IDE, c'est un simple éditeur de texte (Scite). le codage n'est pas bien compliqué et l'aide pas mal faite. Avec les fonctions Run(), Send(), WinWait(), MouseClick() et peut-être Sleep(), tu devrais arriver à tes fins.
 
Mais ici, c'est le topic "programmation", donc du codage. Utiliser l'enregistreur de macros d'Excel, c'est pas développer. AutoIt dispose de ce genre d'outil, mais je ne le recommande pas où juste pour voir les fonctions utilisées suite à tes actions pour t'inspirer et coder ton propre script. AutoIt a aussi un outil d'inspection des objets Windows (ID, dimensions, couleurs...) et un outil de compilation de ton script pour en faire un exe.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-12-2015 à 12:04:58    

Merci Rufo,
 
Je n'ai pas trouvé l'outil AutoIt qui permettrait d'enregistrer des macro, et oui c'est surtout utile pour étudier le code généré.
Je n'ai pas trouvé non plus l'outil d'inspection des objets Windows...
J'ai testé avec Scite et la sortie "debug", et ça déjà je trouve que c'est un avantage par rapport au VBS/HTA.
 
J'ai testé aussi les interfaces (bouton, rario, listes...) qu'on peut générer avec AutoIt et c'est plus zoli qu'en VBS/HTA natif...
 
Ensuite la fonction Run() me parait inintéressante et peut-être plus homogène que la version VBS/HTA.

Reply

Marsh Posté le 18-12-2015 à 13:09:17    

https://www.autoitscript.com/site/autoit/downloads/ tu télécharges la version .zip :
Aut2exe pour compiler un script en exe
Au3Info pour avoir des infos sur un objet.
 
Par contre, y'a plus l'enregistreur de macro. C'était dans le v2. Mais c'est pas très grave, l'aide (fichier .chm) contient pleins d'exemples.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-12-2015 à 13:14:23    

Liste de tous les outils autour d'AutoIt :
https://openclassrooms.com/courses/ [...] 4autoit-v3
 
L'enregistreur de macro ScriptWriter : http://sourceforge.net/projects/autoit-recorder/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-12-2015 à 13:14:23   

Reply

Marsh Posté le 18-12-2015 à 16:38:57    

unisev a écrit :


Ca dit ça :
https://lh3.googleusercontent.com/--N4nAILttik/VnMyfnLtJGI/AAAAAAAADR4/Y7-qpxHy6tw/s800-Ic42/Events.jpg


Ca confirme ma supposition. Maintenant si tu as trouvé un autre outil plus adapté inutile de creuser...
 
Désolé pour le HS: C'est quel navigateur ça, Chrome?

Reply

Marsh Posté le 19-12-2015 à 02:21:19    

Le navigateur c'est IE pour le coup.
 
J'ai redéveloppé tout mon script sous AutoIt3, et c'est globalement plus simple moins "bidouille" que le VBS/HTA.
 
En revanche je n'arrive toujours pas à programmer un clic sur ce bouton... même avec AutoIt3...

Reply

Marsh Posté le 19-12-2015 à 16:53:17    

Bon, j'avance à petits pas, j'ai trouvé ça dans l'onglet "Network" de Chrome :
 
[{"nat":{"dmz":{"ipaddress":"192.168.1.10","state":0,"enable":0}}}]
 
[{"nat":{"dmz":{"ipaddress":"192.168.1.10","state":0,"enable":1}}}]  
 
Je me suis laissé dire que c'était "peut-être un peu" du Java ?
 
Ne puis-je pas utiliser ce genre de "code" dans l'URL pour simuler l'appui sur le bouton ?

Reply

Marsh Posté le 19-12-2015 à 16:58:41    

Tu confonds peut-être Java et Javascript? Les deux n'ont rien à voir... Tes deux lignes c'est des données dans tel ou tel format (JSON?), à mon avis ça ne te servira pas du tout. Je regarderai plutôt le fichier bbox-merge.js ligne 25. Si tu veux tu peux faire une copie du site (--> sauvegarder sous) et la mettre en ligne quelque part (attention qu'il n'y a pas de données sensibles!), j'y jetterai un coup-d'oeil (mais je ne suis pas un pro!).

 

edit: Par contre dans un navigateur le site fonctionne? Juste pour être sûr...

 

edit2: Après refléxion, tes deux lignes là pourraient être des données envoyés par le script (POST) lors de l'appui sur le bouton. Mais je dirai que dans l'état sans autres infos c'est pas particulièrement utile.


Message édité par rat de combat le 19-12-2015 à 17:01:02
Reply

Marsh Posté le 20-12-2015 à 02:05:37    

Voici la page en question, effectivement elle vient avec des scripts JavaScript (dont le bbox-merge.JS) :
http://176.158.133.174/Bbox _ UPnP & NAT_PAT.zip
 
Oui le site fonctionne bien dans un navigateur, c'est ce qui me rend confiant dans la faisabilité de la chose  :)  
 
Je ne connais pas le JavaScript...


Message édité par unisev le 20-12-2015 à 02:06:53
Reply

Marsh Posté le 20-12-2015 à 13:38:57    

Le bbox-merge.js c'est >300ko de code complètement ilisible, aucune chance d'en sortir quelque chose. J'ai téléchargé la page mais elle ne semble pas fonctionner en local, je me prends une erreur NS_ERROR_FILE_UNRECOGNIZED_PATH visible en console sous Firefox. A mon avis l'onglet network de Chrome ou Firefox est la solution pour savoir ce qui se passe exactement, ensuite faudra voir comment reproduire ça. Sinon peut-être avec Wireshark ou un outil genre Fiddler? Je ne peux pas t'aider je crains, comme je disais je n'arrive pas à faire fonctionner la page...

Reply

Marsh Posté le 20-12-2015 à 15:55:57    

 
           Bonjour !
 
           Avec une version d'IE inférieure à 10, il faut parfois donner le focus au bouton avant de cliquer …
 

Reply

Marsh Posté le 20-12-2015 à 17:39:06    

Oui, la page ne fonctionne pas en local, les fonctions de cette page sont en quelque sorte liées au "CORE" du routeur.
 
Oui le script "bbox-merge.js" en impressionnant, une fois qu'on a bien remis un retour chariot derrière chaque caractère ";" on voit bien que c'est un "gros" truc avec des noms de données absolument pas clairs.
En revanche, ça a l'air de faire partie du jQuery, ce qui pourrait être une information intéressante si je connaissais cette technologie...
 
Marc L > j'utilise IE11.
 
La j'avoue que je commence à tourner en rond.

Reply

Marsh Posté le 20-12-2015 à 19:01:36    

 
 
           Si tu es sous Seven, que ce soit avec ta version d'IE comme avec AutoIt, tente en donnant le focus avant le click, sait-on jamais …


Message édité par Marc L le 20-12-2015 à 19:02:08
Reply

Marsh Posté le 20-12-2015 à 19:05:38    

Je pense avoir trouvé quelque chose, lié au JSON :
 
En fouillant dans l'onglet "Network" je vois 2 événements PUT lorsque je clique "humainement" sur le bouton qui permet d'activer ou non la DMZ :
 
Un premier nommé "login" et un second nommé "dmz" :
 
IE me donne les info suivantes sur "login" :
http://176.158.133.174/login.jpg
et voici les information de l’événement "DMZ" :
http://176.158.133.174/DMZ.jpg
 
Ce qui est intéressant c'est que lorsque tape l'URL de demande de l'événement DMZ manuellement dans mon IE he bien ça télécharge un fichier "dmz.JSON" qui contient :
[{"nat":{"dmz":{"ipaddress":"192.168.1.10","state":1,"enable":1}}}]
 
Je pense donc que le PUT-dmz sert à consulter l'état du parametrage du routeur pour remonter les bonne données dans l'IHM.
Et j'imagine que le PUT-login sert lui à changer le paramètre en question...
 
Mais comment "simuler" le bon PUT ?
 
EDIT : Merci Marc je vais retenter cette voie...


Message édité par unisev le 20-12-2015 à 19:06:25
Reply

Marsh Posté le 20-12-2015 à 23:47:27    

Pourquoi tu n'essayes tout simplement pas de reproduire des actions que tu ferais, toi, dans l'IHM (site web dans ton navigateur), donc des saisies de valeurs dans des champs textes, des clics sur des boutons... avec AutoIt :??: Ca ne serait pas plus simple que de vouloir reproduire des trames de données échangées entre le client web et la partie serveur ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-12-2015 à 20:50:42    

Tout d'abord merci à tous et à toi en particulier Rufo pour m'avoir fait découvrir AutoIt.
 
Je suis effectivement reparti dans ce sens et j'ai résolu pas mal de problèmes en appliquant les 2 conseils suivants pour Vista de la page IEnavigate :

Citation :

   3) add the target website to the Trusted Sites security zone in IE,
    4) turn off "Protected Mode" in IE,


 
J'arrive du coup à me connecter, à naviguer, et même à cliquer sur le bon bouton...
 
Le problème qu'il reste :

  • Le click sur le bouton change bien son apparence mais ne lance PAS le changement de paramètre sur le routeur


Autrement dit, si je rafraîchi la page je vois bien que le paramètre n'a pas réellement changé.
 
Mon code :

Code :
  1. #include <IE.au3>
  2. Local $oIE = _IECreate("192.168.1.254",1)
  3. Sleep(1000)
  4. Send("MyPassword{Enter}" )
  5. Sleep(2000)
  6. _IENavigate($oIE, "http://192.168.1.254/natpat.html",1)
  7. Sleep(2000)
  8. $oLink = _IEGetObjById($oIE, "rule-activation-1" )
  9. ; $href = $oLink.href
  10. _IEAction($oLink, "click" )


 
La page concernée et le bout d'HTML associé :
http://176.158.133.174/codeBTNdmz.jpg


Message édité par unisev le 21-12-2015 à 20:55:03
Reply

Marsh Posté le 21-12-2015 à 21:10:56    

Perso, je serais pas passé par l'objet IE mais plutôt par le vrai"IE" (le navigateur complet) en faisant un Run("iexplorer.exe url.html" ) puis en simulant les clics direct dans le vrai navigateur pour pas risquer d'avoir des pbs de mauvaise exécution de javascript ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-12-2015 à 09:48:16    

Merci Rufo,
 
Mais je crois que je vais m'arrêter là, ça m'ouvre la bonne fenêtre et je ne plus qu'à cliquer, après tout je préfère garder une action humaine sur ce paramétrage "sensible".
 
C'est déjà pas mal, mon script (qui fait aussi pleins d'autres choses) m'amène sur la bonne page dans le bon cas de figure et je n'ai plus qu'à cliquer... Autant à l'ouverture qu'à la fermeture du programme qui a besoin de ce paramétrage...
 
Merci à tous, même si je n'arrive pas à cliquer avec le script, je considère le sujet comme résolu

Message cité 1 fois
Message édité par unisev le 22-12-2015 à 09:51:33
Reply

Marsh Posté le 22-12-2015 à 11:36:40    

Je sais pas ce que tu veux faire mais perso j'utiliserai directement l'api dispo plutôt que s'amuser avec des mimics d'interface non ?

Reply

Marsh Posté le 22-12-2015 à 15:09:47    

je veux activer la DMZ de ma bbox.
 
De quelle API parles-tu ?

Reply

Marsh Posté le 22-12-2015 à 23:13:59    

unisev a écrit :

Merci Rufo,
 
Mais je crois que je vais m'arrêter là, ça m'ouvre la bonne fenêtre et je ne plus qu'à cliquer, après tout je préfère garder une action humaine sur ce paramétrage "sensible".
 
C'est déjà pas mal, mon script (qui fait aussi pleins d'autres choses) m'amène sur la bonne page dans le bon cas de figure et je n'ai plus qu'à cliquer... Autant à l'ouverture qu'à la fermeture du programme qui a besoin de ce paramétrage...
 
Merci à tous, même si je n'arrive pas à cliquer avec le script, je considère le sujet comme résolu


Configurer une bbox, c'est sensible comme action ?  :heink: S'il ne reste plus qu'à faire un clic, AutoIt est parfaitement capable de le faire... Mais bon, c'est toi qui vois.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-12-2015 à 23:44:33    

bah l'api que tu montres /api/v1/nat/dmz en envoyant ton PUT et le cookie que tu récupères en te loggant (si l'auth est passée de cette façon, vu que je vois pas d'header http avec un token)

Reply

Marsh Posté le 23-12-2015 à 00:46:25    

@rufo : c'est sensible pour la sécurité du réseau le paramétrage d'une DMZ, je préfère vérifier en personne qu'il est bien désactivé par exemple  ;)  
 
@Je@nb : Ça m’intéresse ce que tu dis... donc je récapitule :
 
Lorsque je tape cette l'URL http://192.168.1.254/api/v1/nat/dmz dans mon navigateur, je reçois un fichier dmz.json qui me fourni le paramétrage en cours de ma DMZ
Je viens de trouver la data que transmet le PUT :
http://176.158.133.174/DMZnetEvent.png
 
Donc comment simuler ça ? je peux le faire par l'URL ?

Reply

Marsh Posté le 23-12-2015 à 01:13:40    

faudrait voir l'intégralité des échanges avec fiddler ou quoi et mimiquer le truc. en PowerShell ta invoke-webrequest qui fait plein de truc, sinon tu peux bidouiller un truc avec curl j'imagine

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed