Faire cliquer Autoit sur le bouton Installer du logiciel Java

Fermé
Venky - 16 nov. 2016 à 16:50
 Venky - 23 nov. 2016 à 11:27
Bonjour à tous,

je débute tout juste dans le scripting et l'utilisation d'Autoit, ce qui me pousse donc à vous solliciter.

En effet, mon but est d'automatiser des installations de logiciel que je suis regulièrement amener à faire, et en l'occurence, j'essaie d'automatiser l'installation de Java.

J'ai commencé à écrire ceci :

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.14.2
Author: ASM

Script Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------

;Application nécéssitant les droits d'admin
#RequireAdmin

;Affichage d’une infobulle d’information
Traytip("Installation Java","Debut de l'installation Java",1000)

;Pause de 3 secondes (pour les PC lents)
Sleep(3000)

;Lancement du setup
ShellExecute("JavaSetup8u111.exe")

;Automatisation des clics
AutoItSetOption('MouseCoordMode',0)

;Attente de l'affichage de la fenêtre d'installation
WinWait("Configuration Java - Bienvenue", "Bienvenue dans Java")
WinWaitActive("Configuration Java - Bienvenue", "Bienvenue dans Java")

Je voudrais savoir comment faire pour que le pointeur de la souris aille cliquer sur le bouton "installer >", mais sans utiliser Autoit Window Info avec les coordonnées, etc. Je voudrais rédiger une ligne de code pour que le pointeur vise le bouton et non les coordonnées d'une position. Je ne sais pas si je m'exprime bien.

Et dans la même logique, si par exemple il faut accepter des conditions d'utilisation en cochant la ligne "Je comprends...", et que c'est "Je refuse..." qui est coché par défaut, comment je peux faire pour que le pointeur aille cocher "Je comprends..." (donc en visant le bouton et non les coordonnées) ?

Est-ce que quelqu'un pourrait m'aider à faire cela et m'expliquer la logique du truc, s'il vous plait ?

Merci d'avance.


A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 nov. 2016 à 16:55
Bonjour

Dans autoit Window info tu as d'autres informations (bien plus précieuses..) que les coordonnées du bouton. (surtout que les coordoonnées peuvent changer en fonction des pc.. de leur résolution....... )
Bref.. tu as, lorsque c'est disponible, l' identifiant du control.
C'est en utiisant cela directement que tu peux manipuler les éléments de tes fenêtres sans avoir à simuler une "souris"
voir ici : https://www.autoitscript.fr/autoit3/docs/intro/controls.htm

Une fois l'ID trouvé ... tu pourra "cliquer" dessus. Pour ça il existe la fonction "ControlClick"
https://www.autoitscript.fr/autoit3/docs/functions/ControlClick.htm
0
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 1 757
Modifié par little boy62 le 17/11/2016 à 22:02
Salut.

+1 Jordane :)
Par contre, c'est un poil plus compliqué.

Il faut d'abord lancer JAVA et rendre la fenêtre active. (winwaitactive, etc)

Mais dans son cas - Java - il y a plus simple : l'installation silencieuse.

Et dans la même logique, si par exemple il faut accepter des conditions d'utilisation en cochant la ligne "Je comprends...", et que c'est "Je refuse..." qui est coché par défaut, comment je peux faire pour que le pointeur aille cocher "Je comprends..." (donc en visant le bouton et non les coordonnées) ? 
Justement, avec l'installation silencieuse, il installe UNIQUEMENT java sans confirmation. ;)

Bref, on peut installer java sliencieusement, via une ligne de commandes dans CMD.

Par contre, sache qu'en AutoIt, on peut lancer des lignes de commandes.

Admettons que tu télécharges java 32bits et que tu le nommes java32.exe

La ligne de commande est :
java32.exe /s

Simple non ?

Ce que je te propose, dans un script AutoIt :
- Tu télécharges la version java souhaitée (32 et/ou 64 bits) avec InetGet
- Tu installes ta version de java
- Une fois l'installation finie, un message de fin apparait. Je t'aurais bien parlé de barre de progression, mais vu que tu débutes, autant faire simple.


Information :
Le lien de téléchargement de java change souvent.

Pour récupérer le lien directement, je te conseille :
  • de récupérer le code source de ce lien : https://www.java.com/fr/download/manual.jsp
  • dans une boucle for next, de chercher la ligne où se trouve le lien de téléchargement
  • de déclarer la ligne dans une variable.


----------------

Autre solution : faire une interface graphique avec deux boutons
  • bouton 1 : télécharger java
  • bouton 2 : installer java (via un glisser déposer)


Le bouton 2 n'a nullement besoin de télécharger le java si tu l'as déjà téléchargé.






Bref, si tu veux, je te fais un script commenté, afin que tu comprennes ;)


++
0
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 1 757
19 nov. 2016 à 12:23
Yo les gins.


J'ai crée deux scripts (pour java 32 et 64 bits) afin de télécharger et installer java de façon silencieuse.

J'ai tout de même ajouter un message de notification. Facilement supprimable, si on n'en veut pas.


Le script pour télécharger java 32 bits

#include <file.au3>
#include <inet.au3>

$DossTmp = @HomeDrive & "\InstJava"
DirRemove($DossTmp, 1)
DirCreate($DossTmp)

; --------------------------------------------------------------------------
TrayTip("", "Récupération du lien de téléchargement (Java 32 bits)", 2.5, 1)
; --------------------------------------------------------------------------

$lien = "https://www.java.com/fr/download/manual.jsp"
$lienjava
= ""
$cs = $DossTmp & "\cs.txt"
$fichier = $DossTmp & "\java32.exe"

$cstmp = FileOpen($cs, 2)
FileWrite($cstmp, _INetGetSource($lien))
FileClose($cstmp)

For $a = _FileCountLines($cs) To 1 Step -1
If StringInStr(FileReadLine($cs, $a), 'hors ligne') And Not StringInStr(FileReadLine($cs, $a), '64bits') Then $lienjava = FileReadLine($cs, $a)
Next
$lienjava = _FindBetweenString($lienjava, 'href="', '">')

; --------------------------------------------------------------------------
TrayTip("", "Téléchargement en cours (Java 32 bits)", 2.5, 1)
; --------------------------------------------------------------------------

$myDL = InetGet($lienjava, $fichier, 1, 1)
Do
Sleep(250)
Until InetGetInfo($myDL, 2) ; Check if the download is complete.
InetClose($myDL) ; Close the handle to release resources.

TrayTip("", "Installation en cours (Java 32 bits)", 2.5, 1)

$command = $fichier & ' /s & exit'
RunWait(@ComSpec & " /c " & $command, "", @SW_HIDE)


; --------------------------------------------------------------------------
TrayTip("", "Fin de l'installation (Java 32 bits)", 2.5, 1)
; --------------------------------------------------------------------------




Func _FindBetweenString($Line, $char1, $char2)
Local $part1 = StringRegExpReplace($Line, "^.*" & $char1, "")
Local $Term = StringRegExpReplace($part1, "\" & $char2 & ".*", "")
Return SetExtended(1, $Term)
EndFunc ;==>_FindBetweenString



Le script pour télécharger java 64 bits

#include <file.au3>
#include <inet.au3>

$DossTmp = @HomeDrive & "\InstJava"
DirRemove($DossTmp, 1)
DirCreate($DossTmp)

; --------------------------------------------------------------------------
TrayTip("", "Récupération du lien de téléchargement (Java 64 bits)", 2.5, 1)
; --------------------------------------------------------------------------

$lien = "https://www.java.com/fr/download/manual.jsp"
$lienjava
= ""
$cs = $DossTmp & "\cs.txt"
$fichier = $DossTmp & "\java64.exe"

$cstmp = FileOpen($cs, 2)
FileWrite($cstmp, _INetGetSource($lien))
FileClose($cstmp)

For $a = _FileCountLines($cs) To 1 Step -1
If StringInStr(FileReadLine($cs, $a), 'hors ligne') And StringInStr(FileReadLine($cs, $a), '64 bits') Then $lienjava = FileReadLine($cs, $a-1)
Next
$lienjava = _FindBetweenString($lienjava, 'href="', '">')

; --------------------------------------------------------------------------
TrayTip("", "Téléchargement en cours (Java 64 bits)", 2.5, 1)
; --------------------------------------------------------------------------

$myDL = InetGet($lienjava, $fichier, 1, 1)
Do
Sleep(250)
Until InetGetInfo($myDL, 2) ; Check if the download is complete.
InetClose($myDL) ; Close the handle to release resources.

TrayTip("", "Installation en cours (Java 64 bits)", 2.5, 1)

$command = $fichier & ' /s & exit'
RunWait(@ComSpec & " /c " & $command, "", @SW_HIDE)


; --------------------------------------------------------------------------
TrayTip("", "Fin de l'installation (Java 64 bits)", 2.5, 1)
; --------------------------------------------------------------------------




Func _FindBetweenString($Line, $char1, $char2)
Local $part1 = StringRegExpReplace($Line, "^.*" & $char1, "")
Local $Term = StringRegExpReplace($part1, "\" & $char2 & ".*", "")
Return SetExtended(1, $Term)
EndFunc ;==>_FindBetweenString



Voilà :)


++
0
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 1 757
19 nov. 2016 à 19:24
EDIT :

A la fin, on peut supprimer le dossier, devenant inutile.

Juste après le dernier "TrayTip", mettre :
DirRemove($DossTmp, 1)



++
0
Venky > little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024
21 nov. 2016 à 16:47
Salut Little Boy62,

c'est gentil de ta part, mais j'ai besoin de passer uniquement par Autoscript car après je vais faire la meme chose avec d'autres logiciels.

Donc, tu sais ce que je pourrais mettre à la suite de mon code pour que le curseur clique sur le bouton : Installer > ?
0
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 1 757 > Venky
21 nov. 2016 à 16:53
Justement.

Ce sud tu demandes comme script ne fonctionnera qu'avec java.

Car entre logiciel, ils n'ont pas la même interface.

Des que j'ai un moment de libre, je te le ferais.


@++
0
Oui, je sais, se serait une référence...
0