Autoit Recuperations d information sur une page Web

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#1
Bonjour,



-j ai une page où j aimerais récupérer des information comme un temps mais il utilise du javascript. Comment faire ?
-j aimerais pouvoir cibler mes clic sur les different "Commission" en étant precis. Comment faire ?

ma page source est assez brouillon ...

http://textup.fr/87372X7
 
Inscrit
7 Juillet 2013
Messages
13
Reactions
0
#2
Pour cibler tes click en étant précis , je pense qu'il y a une fonction en autoIT pour chercher certaines couleurs dans une certaine zone. :)
 
A

Anonymous

Invité
#3
je souhaite utiliser la fonction _IE de l'include <IE.au3> car a l avenir ma page internet sera invisible et donc aucune recherche par pixel sera possible.

Merci cas meme pour l idée ^^
 
A

Anonymous

Invité
#4
Personne a de solution ?
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#5
Si ta page sera cachée, cherche plutot a interagir directement avec le serveur plutot que de cliquer sur des boutons et récupérer des éléments de la page.
Je suppose que le temps est fixé au chargement de la page et un peu de JS sert a le décrémenter, si tu recois la source de la page, tu peux aussi décrémenter le temps depuis un compteur dans ton code et meme faire un retour visuel des temps en temps réel, comme la page.
Pour les clics sur les boutons, regarde si c'est du statique ou de l'AJAX et en fonction de ca, tu interagis directement avec le serveur.

C'est comme ca que je ferai perso.
 
A

Anonymous

Invité
#6
Salut, par quel fonction tu passe pour interagir directement avec le serveur ?
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#7
Google te donnera sûrement une réponse plus appropriée que moi et ça t'évite d'attendre une réponse de quelqu'un :D.
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#8
Tu fais une requête TCP\IP qui s'appelle HTTP, il faut déjà apprendre à se servir de la librairie TCP en AutoIt, tu peux éventuellement passer par des fonctions déjà écrites à condition d'en lire la documentation et d'apprendre à s'en servir (InetGet est inclus dans AutoIt et fonctionne très bien : http://www.autoitscript.com/autoit3/doc ... netGet.htm).
Quant au traitement des données obtenues ça dépend du JS, si la page contient à la base un compteur que le script de la page ne fait qu'incrémenter tu peux tout simplement relever le timer et l'incrémenter toi-même.
Si le compteur n'est pas inclus dans le corps HTML de base et qu'il n'apparaît qu'après exécution du JS, dans ce cas tu dois lire le code et repérer les requêtes envoyées par celui-ci lui permettant de retrouver le timer, et les reproduire dans ton code très simplement.
Ça va prendre juste un peu de temps et quelques essais, nous sommes dispos pour t'aider il faut juste que tu te lances !

Un autre lien pour la route qui donne des pistes pour le traitement de la page HTML obtenue ;

https://www.autoitscript.com/autoit3/do ... gement.htm
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#9
Si il s'avère que l'exécution du code JS est trop complexe pour le reproduire uniquement avec des requêtes sous AutoIt tu peux éventuellement charger la page dans un navigateur en "cache" grâce à l'objet Internet Explorer sous AutoIt : tu appelles l'objet "InternetExplorer.Application.1" et tu lui fais faire des trucs fun pour toi sans avoir besoin nécessairement d'une interface graphique, il exécutera aussi le code JS présent sur la page et te permettra de récupérer la page à chaque fois que tu le voudras.
Pour ce qui est enfin du clic sur le bouton, une simple requête POST envoyée à l'URL définie par le champ "action" de la form contenant le bouton devrait en synthétiser l'effet.
Si ce n'est pas le cas et que le bouton fait appel à une fonction du code JS tu dois lire le code appelé, et le reproduire dans ton script AutoIt (si c'est bien le langage avec lequel tu te sens à l'aise pour écrire ce script).
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#10
Perso je pars du principe que si c'est faisable en JS avec Ajax, c'est faisable depuis un logiciel avec requêtes directes.
C'est peut-être compliqué voire brainfuck, mais ça reste possible et c'est plus ou moins la meilleure méthode selon moi :).
 
A

Anonymous

Invité
#11
Voici mon code actuel, j envoie mon identifiant et mon mdp mais je reçoit rien ... il est muet le site ? o_O

Ou alors, je rate une étape ?

Code:
#include <Inet.au3>
#include <InetConstants.au3>
#include <MsgBoxConstants.au3>

Global $url = "http://s2.daysofevil.com/"
Global $url2 = "s2.daysofevil.com"
;~ 		IP : 5.9.18.86
Global $port = "80"
$index = _INetGetSource($url)

ConsoleWrite($index & @CRLF)

co_index()


Func co_index()
	TCPStartup()
	$IPurl = TCPNameToIP($url2)

	    If @error Then
			MsgBox($MB_SYSTEMMODAL, "", "Code erreur: " & @error)
			Return False
		Else
			; Display the IP address.
			MsgBox($MB_SYSTEMMODAL, "", "IP de l'url : " & $IPurl)
				Global $socket = TCPConnect($IPurl, $port)

					If @error Then
						Local $iError = @error
						MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Echec de la connection, code erreur : " & $iError)
						Return False
					Else

						TCPSend($socket, "psuedo"& "mdp")
							If @error Then
								$iError = @error
								MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Could not send the data, Error code: " & $iError)
								Return False
							Else
								MsgBox($MB_SYSTEMMODAL, "", "Requete envoyer avec succés")
								$recv = TCPRecv($socket, 1000)
								ConsoleWrite("------------------------------------------------------------" & @CRLF)
								ConsoleWrite($recv & @CRLF)

							EndIf


					EndIf


		EndIf
	EndFunc

TCPCloseSocket($socket)
TCPShutdown()
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#12
Si tu veux te connecter, j'ai jeté un coup d'oeil a leur site.
Ils envoient une requete Ajax sur la page d'accueil avec des parametres en URL et passent les infos de connexion en POST, avec des parametres supplementaires.
Il faut sniffer tout ca avec l'inspecteur de Google Chrome par exemple.
Le retour se fait sous forme de json avec la description de l'erreur s'il y en a une.

Tu ne peux pas juste envoyer tes identifiants comme ca a la one again en esperant que ca soit magique.
Faut voir comment ils font eux, comment se fait la communication, sous quelle forme ils envoient les donnees, sous quelle forme ils recoivent les reponses, comment ils les traitent et quelle reponse engendre quoi.
Une fois que t'as grab assez d'infos et que tu comprends leur systeme en lisant leur code (ici JS), tu peux te lancer.

Perso il m'a fallu une vingtaine de minutes dans le JS pour avoir deja une grosse idee de comment ils font, pour te donner une idée du temps que ca prends.
C'pas tres compliqué ici.
 
A

Anonymous

Invité
#13
Salut, j'ai jamais toucher a l ajax, j ai fait un petit tour dans conversion.js et ga.js je ne comprends rien o_O

Toi qui connais mieux que moi les procédure de connexion il ta fallut plus de 20min moi alors combien de temps il me faudra ?

Aidez moi + s'il vous plait car vous rester trop flou j'avance pas.

Amicalement
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#14
Je pense que vu la situation il te serait largement préférable de passer par l'objet IE, jettes un coup d'oeil sur ce tuto (scrolls jusqu'à la partie qui t'intéresse sur l'objet IE), tu y apprendras grossièrement la syntaxe :

-les-ressources-externes.69/]viewtopic.php?f=10&t=80

Ici il s'agit d'avoir une IG intégrant une page HTML, pour nous ce n'est pas voulu puisqu'on veut tout faire sans IG de façon automatisée.
A partir de ces quelques lignes tu récupères déjà le contenu de la page via une commande de l'objet (à toi de la chercher), et tu peux ensuite actionner le formulaire des éléments du site en passant par d'autres commandes qui sont documentées sur les sites Microsoft éditeurs de l'objet.
Je vais essayer d'écrire quelque chose de potable d'ici à demain qui te fasse une base pour comprendre le truc, je ne te promets rien ça fait longtemps que je n'ai pas touché à AutoIt (je n'ai même plus SciTE d'installé...)
 
A

Anonymous

Invité
#15
Les objet IE ^^ j ai deja un code avec cette methode qui fonctionne bien, cependant pour les temps et recuperer des truc de javascript, sa va etre casi impossible vue mon niveau en javascript ...
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#16
Tu veux bien me montrer ton code ? Quand tu dis "récupérer des trucs de JS", ce que tu veux c'est bien le timer de la page non ?
Il est inclus dans le code HTML, tu peux le récupérer à chaque fois que tu inspectes la page normalement.
Il me semble qu'il y a largement de quoi récupérer le timer dans le corps de la page avec toutes les fonctions dispo :

http://www.autoitscript.com/autoit3/doc ... gement.htm
 
A

Anonymous

Invité
#17
Voili voila ^^

Code:
Func GUICtrlGroup($sCtrl)              ; Fonction 1 qui consiste à regrouper les CTRL
    $sSplit = StringSplit($sCtrl, "/")                  ; La fonction découpe le paramètre par rapport au symbole "/"

    $sReturn = $sSplit[0] & "." & $sCtrl            ; Puis attribue le nombre de CTRL dans le GROUPE
    Return $sReturn                                        ; Et retourne le résultat ( soit le GROUPE )
EndFunc   ;==>GUICtrlGroup

Func GUICtrlGroupSetState($sGUICtrlGroup, $sState) ; Fonction 2 qui consiste à changer l'état d'un GROUPE
    $sSplit2 = StringSplit($sGUICtrlGroup, ".")               ; Elle récupère le nombre de CTRL
    $DiffCtrl = StringSplit($sSplit2[2], "/")                    ; Divise le GROUPE affin de récupéré tous les CTRL
    For $i = 1 To $sSplit2[1]                                      ; Une boucle va se répéter le nombre de fois = au nombre de CTRL affin de tous les modifier 1 par 1 ( très rapidement et instantané à nos yeux )
        GUICtrlSetState($DiffCtrl[$i], $sState)             ; Et HOP !
    Next
EndFunc   ;==>GUICtrlGroupSetState

#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $backco = 0
Global $co_deco = 0
Global $sUrl = "http://s2.daysofevil.com/"

#Region ### START Koda GUI section ### Form=y:\script\days of evil\gui doe.kxf
$Form2 = GUICreate("Form2", 939, 478, 192, 123)
$Connection = GUICtrlCreateGroup("Connection/deconnexion", 8, 8, 137, 81)
$Log_in_out = GUICtrlCreateButton("Connection", 40, 40, 75, 25)
$ID = GUICtrlCreateGroup("Identifiants", 152, 8, 297, 81)
$Login = GUICtrlCreateInput("", 304, 24, 121, 21)
$Mdp = GUICtrlCreateInput("", 304, 56, 121, 21)
$Label1 = GUICtrlCreateLabel("Identifiant : ", 184, 32, 59, 17)
$Label2 = GUICtrlCreateLabel("Mot de passe : ", 184, 56, 77, 17)
$Menus = GUICtrlCreateGroup("Menus", 8, 96, 441, 145)
$Forteresse = GUICtrlCreateButton("Forteresse", 16, 120, 75, 25)
$Quete = GUICtrlCreateButton("Quêtes", 104, 120, 75, 25)
$Mecha = GUICtrlCreateButton("Mecha", 192, 120, 75, 25)
$Armee = GUICtrlCreateButton("Armée", 280, 120, 75, 25)
$Actions = GUICtrlCreateButton("Actions", 16, 160, 75, 25)
$Combat = GUICtrlCreateButton("Combat", 104, 160, 75, 25)
$Production = GUICtrlCreateButton("Production", 192, 160, 75, 25)
$Recherche = GUICtrlCreateButton("Recherche", 360, 160, 75, 25)
$Commerce = GUICtrlCreateButton("Commerce", 360, 120, 75, 25)
$Entrepot = GUICtrlCreateButton("Entrepôt", 280, 160, 75, 25)
$Guilde = GUICtrlCreateButton("Guilde", 16, 200, 75, 25)
$Shop = GUICtrlCreateButton("Shop", 104, 200, 75, 25)
GUISetState(@SW_SHOW)
$Group1 = GUICtrlGroup($ID & "/" & $Login & "/" & $Mdp & "/" & $Label1 & "/" & $Label2) ; La fonction GUICtrlGroup() ne prend que 1 paramètre : les différents CTRL à regrouper, séparés du symbole "/" pour les différentier
$Group2 = GUICtrlGroup($Menus & "/" & $Forteresse & "/" & $Quete & "/" & $Mecha & "/" & $Armee & "/" & $Actions & "/" & $Combat & "/" & $Production & "/" & $Recherche & "/" & $Commerce & "/" & $Entrepot & "/" & $Guilde & "/" & $Shop)
GUICtrlGroupSetState($Group2, $GUI_HIDE)
#EndRegion ### END Koda GUI section ###

;~ --------------------------------------------------------------------------
;~		_IENavigate($oIE, $page)							Acceder a une page
;~ 		_IEQuit ($oIE)										Supprimer la page
;~ 		GUICtrlGroupSetState($Group1, $GUI_HIDE) 			Fonction qui va cacher le groupe 1
;~ --------------------------------------------------------------------------

Local $oIE = _IECreate("s2.daysofevil.com", 0, 1, 0, 1)


_nav()

Func _nav()
	While 1
   $nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $Log_in_out
				If $co_deco = 0 Then
					Global $sUsername = GUICtrlRead($Login)
					Global $sPassword = GUICtrlRead($Mdp)
					Sleep(1000)
					$oForm = _IEFormGetCollection($oIE, 0)
					$oUsername = _IEFormElementGetObjByName($oForm, 'nick')
					$oPassword = _IEFormElementGetObjByName($oForm, "pw")
					_IEFormElementSetValue($oUsername, $sUsername)
					_IEFormElementSetValue($oPassword, $sPassword)
					Sleep(1000)
					_IEFormSubmit($oForm)
					Sleep(1000)
					_Connection()
				ElseIf $co_deco = 1 Then
					_IENavigate($oIE, "http://s2.daysofevil.com/game/logout.php", 1)
					GUICtrlGroupSetState($Group2, $GUI_HIDE)
					GUICtrlGroupSetState($Group1, $GUI_SHOW)
					GUICtrlSetData($Log_in_out, "Connexion")
					$co_deco = 0
				EndIf
			Case $Production
				_IENavigate($oIE, "http://s2.daysofevil.com/game/produktion.php", 1)
				$fileprod = "production.html"
				Sleep(1000)
				Local $sHTML = _IEBodyReadHTML($oIE)
				$file = FileOpen($fileprod, 2)
				FileWrite($file, $sHTML)
				FileClose($file)
		EndSwitch
	WEnd
EndFunc


Func _Connection()
	$fileco = "connection.html"
	Sleep(1000)
	Local $sHTML = _IEBodyReadHTML($oIE)
	$file = FileOpen($fileco, 2)
	FileWrite($file, $sHTML)
	FileClose($file)

;~ 	Verification de l authantification

	FileOpen($fileco)
	$lineread = FileReadLine($fileco, 19)
	$lineread2 = FileReadLine($fileco, 357)

	ConsoleWrite("$lineread = " & $lineread & @CRLF)
	ConsoleWrite("$lineread2 = " & $lineread2 & @CRLF)

	If $lineread = "		    Le processus de connexion a échoué. Les identifiants saisis sont incorrects.			<br>" Then
		$backco = 0
	ElseIf $lineread2 = "					crazy47 (FLD)					</span></td>" Then
		$backco = 1
	EndIf

	If $backco = 0 Then
		MsgBox(000, "", "Echec de la connexion",5)
		_IEQuit ($oIE)
	ElseIf $backco = 1 Then
		$co_deco = 1
		GUICtrlSetData($Log_in_out, "Deconnexion")
		GUICtrlGroupSetState($Group1, $GUI_HIDE)
		GUICtrlGroupSetState($Group2, $GUI_SHOW)

	EndIf
EndFunc
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#18
Faut dire aussi que si tu galères en Javascript et si tu regardes dans ga.js (GA c'est Google Analytics, pas grand chose a voir avec le site), tu vas pas pouvoir avancer :/.
Donc t'as deux choix. Soit tu montes tes skills en JS et tout ce qu'il faudra pour faire un truc qui pète, soit tu utilises l'objet IE comme dit plus haut.
A toi de voir.
 
A

Anonymous

Invité
#19
Tu dit que je galère en JS mais qu il faut que je fasse des "skill" ==> (C'EST QUOI SA ? o_O).

Je pense que :
- soit tu m aide pour le JS
- soit je reste comme je suis partie ...

Comme j ai meme pas le vocabulaire du JS sa sert a rien que je reste dans cette situation stagnante si non je le finirais jamais.
 

RedBust

Membre Actif
Inscrit
1 Decembre 2009
Messages
260
Reactions
0
#20
Tu n'as aucune raisons d'être bloquée à ce niveau là, qu'est-ce qui t'empêche de te servir de la base de code que tu as pour lire le contenu de ta page avec l'UDF ?
J'ai essayé de créer un compte sur ton jeu pour voir un peu le contenu de la page mais ça a foiré pour X raisons, je vais réessayer et voir ça
EDIT : "skill" veut dire "compétence", "savoir-faire" :lol:
 
Haut Bas