Page 1 sur 1

[R] Capter le nom d'un input dans une page web sous IE

Posté : dim. 12 mai 2013 06:17
par cortx
Bonjour;

Suite à la nouvelle politique de DynDNS, je susi en trian de me faire un script tout simple qui lance IE, se connecte sur le site de DynDNS, rentre mes identifiants et ferme IE.
Je lancerai ce script une fois par mois depuis les taches plannifiés Windows pour ne plus avoir à gérer cela.

Or je bloque sur la récupération de l'inputbox pour rentrer mon identifiant et password.
Pour une fois je ne souhaite pas gérer la position de souris car je me dit que la position des box peux changer si une pub ou un bandeau est ajouté sur le site.

Voici le site en question; https://account.dyn.com/
Il y a deux box à récupérer, celle du login et celle du password (quoi que le password je peux l'avoir avec un coup de tab une fois le login rentré.

J'utilise Autoit Window Info, mais il ne capte pas l'inputbox, il reste fixé sur la page elle-même.
J'ai trouvé deux trois script sur le net, mais chacun me demande de remplir le nom de l'input donc je bloque ou alors sont vieux et ne foncionne plus en l'état.

Quelqu'un pourrait il me filer un coup de pouce là-dessus ?

Merci d'avance.
CortX

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : dim. 12 mai 2013 10:50
par ani
Bien le bonjour cortx,
Autoit Window Info est un outils pour l'interface ()
Pour IE un simple F12 lance l'outils d'analyse page web 'Outils développement'. ou de lire la source de la page vers la ligne 103 y a toute les information pour y remplire la Form de connection.
Comme cette exemple

Code : Tout sélectionner

#include <IE.au3>
$User = "test"
$Pass = "1234"
$oIE = _IECreate ("http://account.dyn.com")
$oForm = _IEFormGetCollection ($oIE, 0)
$oUserName = _IEFormElementGetObjByName ($oForm, "username")
$oPassWord = _IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue ($oUserName, $User)
_IEFormElementSetValue ($oPassWord, $Pass)
_IEFormSubmit($oForm)
bonne continuation ;)

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : lun. 13 mai 2013 03:45
par cortx
BOnjour;

Merci pour l'information;
Ce que je dois récupérer comme information c'est donc frm.elements['password'],
Est ce que frm.elements c'est une constante de nom que je retrouverai sur tous les sites ?
Comment rechercher ce genre d'info sur n'importe quel site sans s'y connaitre un minimum ?
Je suppose que tu ne t'es pas tappé les 110 lignes de code en lecture du soir.

Edit;
Erreur sur
C:\Program Files (x86)\AutoIt3\Include\IE.au3 (1802) : ==> The requested action with this object has failed.:
$o_object.submit()
$o_object.submit()^ ERROR
*
Quant je demande à afficher $oForm via "msgbox (0, "", $oForm)" il n'y à rien de renvoyé.

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : lun. 13 mai 2013 09:09
par ani
Ce code-ci devrait fonctionne

Code : Tout sélectionner

#include <IE.au3>
$User = "test"
$Pass = "1234"
$oIE = _IECreate ("http://account.dyn.com")
$oForm = _IEFormGetCollection ($oIE, 0)
$oUserName = _IEFormElementGetObjByName ($oForm, "username")
$oPassWord = _IEFormElementGetObjByName ($oForm, "password")
$oSubmit = _IEFormElementGetObjByName($oForm, "submit")
_IEFormElementSetValue($oUserName, $User)
_IEFormElementSetValue($oPassWord, $Pass)
_IEAction($oSubmit,"click")
Pour obtenir les noms des inputs

Code : Tout sélectionner

$oIE = _IECreate ("http://account.dyn.com")
$oForm = _IEFormGetCollection ($oIE,0)
$oInputs = _IETagNameGetCollection($oForm,"input")
ConsoleWrite("Form Info:Name:" & $oForm.name & " - id:"& $oForm.id & " - Action:"& $oForm.action & @LF)
For $oInput In $oInputs
    ConsoleWrite("input Info:Name:" & $oInput.name & " - id:"& $oInput.id & " - type:"& $oInput.type & @LF)
Next
Exit
Non tu ne trouvera pas cette constantes sur tout les sites.
Et non je ne me suis pas tapé le code Source en entier juste survolé, j'aurai du m'y attardé un peu, pour y observer le antisubmit.

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : lun. 13 mai 2013 12:04
par mikell
Donc en appliquant la recette de ani ceci devrait marcher

Code : Tout sélectionner

#include <IE.au3>
$User = "test"
$Pass = "1234"
$oIE = _IECreate ("http://account.dyn.com")
$oInputs = _IETagNameGetCollection($oIE,"input")
  For $oInput In $oInputs
      If $oInput.name == "username" Then $oInput.innertext = $User
      If $oInput.name == "password" Then $oInput.innertext = $Pass
      If $oInput.name == "submit" Then _IEAction($oInput, "click")
 Next
 

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : mer. 15 mai 2013 07:25
par cortx
Bonjour;

Merci pour vos codes, cela fonctionne à la perfection.

Mikell, dans ton site tu test savoir si l'input à bien la valeur 'username' par exemple pour la remplir.
Mais concrètement cela sert à quoi comparé au remplissage 'en force' comme le fait ani ?
Simplement à ne pas renvoyer d'erreur au cas ou le site change à la mode: "Comme ça n'existe pas, alors je ne fais pas mais ce n'est pas une erreur"

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : mer. 15 mai 2013 09:32
par mikell
Pas de différence majeure entre les scripts, juste une autre approche dans l'idée du titre du sujet : lister les inputs et vérifier leurs noms
Note que dans le script d'ani tu peux utiliser _IEGetObjByName et zapper la rechercher de form, ça marche aussi

Re: [..] Capter le nom d'un input dans une page web sous IE

Posté : mer. 15 mai 2013 17:41
par jguinch
Salut.
J'avais trouvé ça sur le forum US, un petit truc sympa qui permet d'avoir quelques infos sur une page.
C'est plus rapide que de fouiner dans le source... :wink: