Autoit

Fermé
Xavier - Modifié par irongege le 21/08/2013 à 20:45
 Xavier591 - 2 sept. 2013 à 10:32
Bonjour,

J'ai quelques souci sur Autoit et je voudrais de l'aide :')
S'il vous plaît, épargnez moi vos commentaire "Tu veut faire quoi ? Un bot ? Non, on ne t'aideras pas " car ce n'est pas dans ce but ... !

Tout d'abord, j'ai un problème pour redimenssionner une page web, normalement ça devrait être un truc du genre :

Run ( "C:\Program Files\Mozilla Firefox\firefox.exe")
 WinWaitActive("C:\Program Files\Mozilla Firefox\firefox.exe")
 WinMove("[CLASS:firefox.exe]","",30,30,400,600) ; ici, Redimensionner ma page internet


Pourtant, ma page internet ne se redimensionne pas :(

Ensuite, je voudrais que le script trouve un text, le localise, puis clique dessus. Malheureusement, je ne trouve pas comment faire :/

Enfin, et prenons un exemple concret, si je voulais que mon script envoie un mail et que je ne voulais pas voir, ma souris bouger, internet s'executer, mais que tous ça se passe au niveau du processeur et que je ne voie rien, comment devrais je faire ? Faut-il télécharger un add-on ou carrément programmer avec du C ou un autre language ?

Merci d'avance
Xavier

5 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
22 août 2013 à 15:41
Salut,

WinWaitActive doit comporter en premier argument le titre de la fenêtre, ou un autre identifiant accepté par AutoIt. Pas de chemin vers un exécutable : https://www.autoitscript.com/autoit3/docs/functions/WinWaitActive.htm

Tu devrais examiner les valeurs de retour des fonctions, pour vérifier si elles ont été exécutées avec succès.

Pour envoyer un e-mail, vois _INetSmtpMail : https://www.autoitscript.com/autoit3/docs/libfunctions/_INetSmtpMail.htm

Pour localiser un texte et cliquer dessus, je suppose que tu parles d'un texte dans la page du navigateur. Je ne crois pas que l'on puisse faire cela avec AutoIt. Tu peux en revanche rechercher des pixels d'une certaine couleur dans une zone de l'écran et simuler des clicks.

Voilà un exemple corrigé de ton code ci-dessus.

Opt("WinTitleMatchMode", 2)  ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase

$res = Run("C:\Program Files\Mozilla Firefox\firefox.exe")
If $res == 0 Then
    MsgBox(4096, "Error", "Could not start Firefox")
    Exit
 Else
   $res = WinWaitActive("Mozilla Firefox", "", 10)
   If $res == 0 Then
	  MsgBox(4096, "Error", "Could not find and get focus on Firefox window")
	  Exit
   Else
	  $res = WinMove("Mozilla Firefox","",30,30,400,600) ; ici, Redimensionner ma page internet
	  If $res == 0 Then
		 MsgBox(4096, "Error", "Could not move the Firefox window")
		 Exit
	  Else
		 MsgBox(4096, "Info", "all is done, without errors")
	  EndIf
   EndIf
EndIf

Opt("WinTitleMatchMode", 2) s'assure que ton argument de recherche de titre va matcher aussi si tu tapes une partie du titre.

Si tu veux utiliser des noms de "CLASS" au lieu du titre de la fenêtre pour localiser tes fenêtres, tu ne peux pas inventer un nom qui te passe par la tête. Tu dois déterminer quel est ce nom pour la fenêtre en question. Tu peux faire cela avec l'outil "AutoIt Window Info" qui est installé avec AutoIt.


Dal
0
Merci beaucoup de votre réponse.
J'ai pas mal de problème avec autoIT et je sens que vous allez beaucoup m'aider.
Bon, la mes parents me demande ( déjà ) d'allez au lit, j'essaierai donc plus en détails tout cela demain et vous direz comment ça marche (;
Merci encore !
0
Bonjour,

Voilà le programme ( pas terminé evidemment ) :
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate(":) Script By Destro", 345, 254, 317, 200)
$Button1 = GUICtrlCreateButton("&OK", 168, 225, 75, 25)
$Button2 = GUICtrlCreateButton("&Cancel", 256, 225, 75, 25)
$Radio1 = GUICtrlCreateRadio("X", 64, 56, 55, 17) ; Séléction
$Radio2 = GUICtrlCreateRadio("XX", 208, 56, 55, 17) ; Séléction
$Pseudo = GUICtrlCreateInput("Pseudo", 104, 88, 121, 21) ; Pseudo
$Mdp = GUICtrlCreateInput("Mot de passe", 104, 112, 121, 21) ; Mot de passe
$Pic1 = GUICtrlCreatePic("C:\Users\Moi\Downloads\page-secrete-1.jpg", 0, 0, 609, 441)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$Radio1 = 0 And $Radio2 = 0

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button2
			Exit
		Case $Radio1
			$Radio1 = 1
			$Radio2 = 0
		Case $Radio2
			$Radio1 = 0
			$Radio2 = 1
		Case $Button1
			MsgBox(4096, "Info", "all is good")
			ExitLoop
	EndSwitch
WEnd


Opt("WinTitleMatchMode", 2)  ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase

$res = Run("C:\Program Files\Mozilla Firefox\firefox.exe")
If $res == 0 Then
    MsgBox(4096, "Error", "Could not start Firefox")
    Exit
 Else
   $res = WinWaitActive("Mozilla Firefox", "", 10)
   If $res == 0 Then
	  MsgBox(4096, "Error", "Could not find and get focus on Firefox window")
	  Exit
   Else
	  $res = WinMove("Mozilla Firefox","",100,30,1100,700) ; ici, Redimensionner ma page internet
	  If $res == 0 Then
		 MsgBox(4096, "Error", "Could not move the Firefox window")
		 Exit
	  Else
		 MsgBox(4096, "Info", "all is done, without errors")
	  EndIf
   EndIf
EndIf
Sleep (1000)
MouseClick ( "left", 315, 125)
Send ("xxx.fr {ENTER}")
Sleep (3500)
If $Radio1 = 1 Then
	MouseClick ( "left", 936, 254)
EndIf
If $Radio2 = 1 Then
	MouseClick ("left", 1030, 255)
EndIf

MouseClick ("left", 951, 283)
Sleep (500)
Send ($Pseudo) ; Le pseudo est entrée
Sleep (500)
MouseClick ("left", 951, 314) ; Double
Sleep (200)
MouseClick ("left", 951, 314) ; Clic
Sleep (500)
Send ($Mdp) ; Le mot de passe est entrée
MouseClick ("left", 1001, 344)
Sleep (2000)


Bon, le probème, c'est quand je demande que le programme écrive le Mdp et le Pseudo (normalement) stocker dans les variables $Pseudo et $Mdp ... ben ... ça marche pas :(
Auriez vous une solution.
Merci d'avance.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
23 août 2013 à 17:18
Salut Xavier59,

Pour accéder à la barre d'adresse envoie Alt-D à Firefox, plutôt que de cliquer sur des coordonnées où tu penses que peut se trouver celle-ci.

AutoIt n'est pas vraiment fait pour accéder au contenu de pages Web.

Pour accéder à des formulaires, cependant, là aussi au lieu de cliquer, tu pourrais envoyer des tabulations, jusqu'à ce que tu sois sensé tomber sur le bon formulaire (compte le nombre de tabulations nécessaires depuis le stade postérieur à la validation de l'adresse).

Il y a des outils plus adaptés que AutoIt pour intéragir avec un site Web ou le contenu d'une page Web. AutoIt est fait pour intéragir avec des contrôles Windows.

Si tu nous dit ce que tu veux faire, on pourra peut-être te guider.


Dal
0
Bonjour,

Je voudrais devenir informaticien, bref, j'ai 14 ans, et ce language m'interesse. Donc je m'y suis lancé. Je voudrais automatiser des actions. Par exemple, comme je suis un flemmard, je voudrais que le script quand je clique dessus, ouvre internet et me connecte à Hotmail. Je sais bien qu'il doit bien exister des logiciels pour faire ça, mais je veut le faire tout seul (:
Et puis, si je fait rien, je serais toujours nul et je ne m'améliorerais pas. Donc, comme toute personne, je passe par la case " noobie " et y a pas de honte :D

Ce pourquoi j'ai demander de pouvoir faire " Winmove" c'est parceque j'ai lu qu'il fallait donner une valeur a la page pour pouvoir faire les clics, car si je mets en téléchargement le " logiciel ", les personnes qui n'aurait pas la même grandeur d'écran ... ça ne marcherai pas. L'histoire des tabulations et pas mal aussi, mais pour cliquez sur des liens.... je vais avoir du mal x)

Sinon, quel est le moyen pour stocker l'info de mon inputbox de mail et de mdp.

Merci d'avance.
0
Bon j'ai un peu essayé votre message du "TAB" ça m'a l'air pas trop mal, seulement, l'élément que je veut atteindre est un lien qui est en javascript, et donc, du coup, ça ne marche pas...
Donc à part le "clic souris" j'ai une autre solution ? :')
0
Bon, pour l'inputbox, j'ai finit par réussir, c'était plutot facile finalement ( surtout avec l'aide d'un forum :p )
Bon désolé de polluer hein ....
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
23 août 2013 à 19:04
Bravo, tu avances visiblement :-)

Si ton but est d'apprendre la programmation sur un exemple, pourquoi pas AutoIt.

Pour intéragir avec une page, comme tu utilises Firefox, un outil comme Selenium IDE peut cependant être beaucoup plus adapté : https://www.selenium.dev/projects/ et facile à mettre en oeuvre avec ses fonctions d'enregistrement et de play-back.


Dal
0
Oui, mon programme avance bien, on peut maintenant, mettre sur "pause", "quittez" et j'ai mis en place votre "alt + D" pour l'url
Bon je vais regarder de ce côté.
Je vais essayer de comprendre un peu "Selenium IDE" qui m'a l'air un peu compliqué, surtout que le site est en anglais, mais je vais regarder ce que je trouve dessus sur google et essayé de traduire (un peu), vu que je veut surtout pas qu'on me mache le travail :)
Merci, si vous avez d'autres infos utiles à me communiquer, je suis prenenur !
0
Je voudrais savoir si ce code "pourrait", eventuellement, fonctionné.
Le script chercherait la couleur d'un pixel sur la page web.
Le voici, j'espère que vous le comprendrez ( et qu'il n'y a pas trop d'erreur ... mais bon, un script ne fonctionne jamais du premier coup !! )

$Searchx = 100 ; Absisse
$Searchy = 140 ; Ordonnée

While
$Searchx + 10 = $Searchx ;La recherche en abscisse prend + 10

If $Searchx = 1170 Then
	$Searchy + 10 = $Searchy ; Si l'abscisse et de 1170, l'ordonnée gagne 10 et l'abscisse reviens a 0
	$Searchx = 0
EndIf


$FindPixel = PixelSearch ($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 159:125:88 )

If $FindPixel = 1 Then
	MsgBox (4096, "Info", "Pixel trouvé")
Endif
	

If $Searchx = 1170 And $Searchy = 720 Then
	MsgBox (4096, "Erreur", "Erreur pixel nons trouvé")
EndIf
	
WEnd


Merci d'avance (:
0
Bon j'ai un peu corrigez tous ça, mais ça ne marche toujours pas ...

$Searchx = 100 ; Absisce
$Searchy = 140 ; Ordonnée

While 2
$Searchx = $Searchx + 10 ;La recherche en abscisse prend + 10

If $Searchx = 1170 Then
	$Searchy = $Searchy + 10
	$Searchx = 0
EndIf

$FindPixel = PixelSearch ($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 0xFFE3BB)

If $FindPixel = 1 Then
	MsgBox (4096, "Info", "Pixel trouvé")
EndIf

If $Searchx = 1170 And $Searchy = 720 Then
	MsgBox (4096, "Erreur", "Erreur pixel nons trouvé")
EndIf
WEnd


Y a jamais de messages qui apparait malheureusement :(
Ou est ma faute s'il vous plait ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 26/08/2013 à 10:48
Salut Xavier,

PixelSearch utilise @error pour déterminer si la fonction a trouvé le pixel ou pas, et si le pixel a été trouvé, ses coordonnées sont renvoyées dans un tableau.

https://www.autoitscript.com/autoit3/docs/functions/PixelSearch.htm

Local $coord = PixelSearch($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 0xFFE3BB)
If Not @error Then
    MsgBox (4096, "Info", "Pixel trouvé aux coordonnées : " & $coord[0] & "," & $coord[1])
EndIf

(code adapté de celui présenté dans la documentation ci-dessus)

De plus, tu crées une boucle infinie en faisant "While 2" (https://www.autoitscript.com/autoit3/docs/keywords/While.htm). Il faudrait que tu en sortes d'une façon ou d'une autre.

Par exemple, lorsque $Searchy atteint une certaine valeur, utiliser ExitLoop te permettrait de sortir du While

https://www.autoitscript.com/autoit3/docs/keywords/ExitLoop.htm

Sinon, tu vas te retrouver à scanner des zones de l'écran qui n'existent pas.

Cela dit, tu ferais mieux de réduire le champ de la recherche, si tu peux... comme conseillé par la doc de PixelSearch.

La documentation de AutoIt est bien faite, elle comporte des exemples pour chaque fonctions. C'est en anglais, mais si tu veux apprendre à programmer, il va falloir t'y mettre (et ce n'est pas si compliqué l'anglais informatique).


Dal
0
Merci beaucoup à vous, j'ai énormément avancé depuis et j'ai été capable de créer quelques logiciels avec Autoit que j'ai mis en ligne.
Néamoins, il me reste encore un problème, justement avec la fonction PixelSearch()
J'avais vu dans un logiciel fait à l'aide d'autoit, que l'utilisateurs pouvais définir la zone de recherche à l'aide d'un rectangle vert. Cela enregistrer le rectangle qu'il allait définir pour PixelSearch(). Mais après avoir recherché sur Internet, je n'ai pas trouvé le code !(
Le connaissez vous ?
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
-------------------------------------------------------------------------

AutoIt Version: 3.3.8.1
Author: myName

Script Function:
Template AutoIt script.

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

; Script Start - Add your code below here

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("DARKOBIT BOT", 224, 305, 268, 121)
$InputShield = GUICtrlCreateInput("1-10", 136, 64, 65, 24)
$InputHP = GUICtrlCreateInput("1-10", 136, 96, 65, 24)
$InputLife = GUICtrlCreateInput("1-10", 136, 128, 65, 24)
$Label1 = GUICtrlCreateLabel("Shield Button", 16, 56, 82, 20)
$Label2 = GUICtrlCreateLabel("HP Button", 16, 96, 63, 20)
$Label3 = GUICtrlCreateLabel("Reparation Button", 16, 136, 111, 20)
$Label4 = GUICtrlCreateLabel("BOT EPAVE BY DESTRO", 16, 16, 191, 20)
$Hotkey = GUICtrlCreateLabel("Hotkey", 80, 168, 55, 20)
$Label5 = GUICtrlCreateLabel("Start : S", 8, 200, 49, 20)
$Label6 = GUICtrlCreateLabel("Pause : P", 72, 200, 61, 20)
$Label7 = GUICtrlCreateLabel("Stop : ESC", 144, 200, 68, 20)
$Save = GUICtrlCreateButton("Save", 56, 240, 123, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Save
$Shield = GUICtrlRead($InputShield)
$HP = GUICtrlRead($InputHP)
$Life = GUICtrlRead($InputLife)
GUIDelete("DARKOBIT BOT")
ExitLoop
EndSwitch
WEnd


Global $Request
HotKeySet ("p", "Pause")
HotKeySet ("s", "Start")
HotKeySet ("{ESC}", "Stop")


Sleep (100000000)
MsgBox(4096,"Hey :D", "Hey, wake up ! Hotkey : S for start")


Func Pause()
$Request = Not $Request
While $Request
Sleep(100)
WEnd
EndFunc

Func Start()

$Sleep1 = 1
$Sleep2 = 3
$Sleep3 = 4
$Time = 0

While 1

If $Sleep1 = 1 Then
Send ($Shield)
$Sleep1 = 0
EndIf

If $Sleep2 = 3 Then
Send ($HP)
$Sleep2 = 0
EndIf

If $Sleep3 = 4 Then
Send ($Life)
$Sleep3 = 0
EndIf



While 1
If $Time = 30 Then
ExitLoop
EndIf

$coord = PixelSearch (100,100,1580,880, 0xFF0000,70); Ici, je voudrais que le rectangle de recherche soit adapter pour chacun et que l'utilisateurs puisse faire un rectangle pour délimité .
If Not @error Then
MouseClick ("left", $coord[0]+50, $coord[1]-50,1,0)
Send("1")
EndIf
Sleep(1000)
$Time = $Time + 1
WEnd

$Time = 0


$Sleep1 = $Sleep1 + 1
$Sleep2 = $Sleep2 + 1
$Sleep3 = $Sleep3 + 1

WEnd
EndFunc

Func Stop()
MsgBox(4096, "Info", "Exit with sucess")
Exit 0
EndFunc
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
2 sept. 2013 à 10:30
Tu connais le jeu des 7 erreurs ?

S'il vous plaît, épargnez moi vos commentaire "Tu veut faire quoi ? Un bot ? Non, on ne t'aideras pas " car ce n'est pas dans ce but ... !

vs.

$Form1 = GUICreate("DARKOBIT BOT", 224, 305, 268, 121)
0
Bah oui, vallait mieux commençais à être honnête un jour ^^
Vaut mieux tard que jamais.
Merci quand même.
++
0