[R] Contrôler interface web <input type=FILE>

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
drakonash
Niveau 1
Niveau 1
Messages : 2
Enregistré le : mar. 29 oct. 2013 15:16
Status : Hors ligne

[R] Contrôler interface web <input type=FILE>

#1

Message par drakonash »

Bonjour,

je suis en train de travailler sur un Autoit qui interagist avec un site web. Il doit remplir un formulaire qui contient un input de type "FILE".
C'est cette input qui me pose problème.

Tout d'abord voici le code du formulaire web :

Code : Tout sélectionner

<form method="post" action="upload" id="uploadform">
<span>
<label>log</label>
<input onchange="chkFileExists(this)" name="upload_file[]" id="upload_file[]" data-title="log" type="file" required="required" />
.......
.......
.......
</span>
</form>
Il est en partise couperé car trop long et les modo m'auraient taperé dessus ^^, je n'ai mis que la partise qui me pose problème.

Mon Autoit consiste à remplir les différents champs de ce formulaire puis de valider le formulaire.
Voci l'Autoit :

Code : Tout sélectionner

    #include <IE.au3>
    local $lfile = "D:\Documents and Settings\XXXXXX\Bureau\xxxx_2012-03-18_05_59_29_235600.txt"
    Local $lserver = "Europe - France"
    local $ltimezone = "(GMT+01:00) Paris"
    local $oIE = _IECreate(http://xxx.com",0,1)
    _IELoadWait($oIE)
    Sleep(150)
    local $oForm = _IEGetObjById($oIE,"uploadform")
    local $ofile = _IEFormElementGetObjByName($oForm, "upload_file[]")
    local $oserver = _IEFormElementGetObjByName($oForm, "server")
    local $otimezone = _IEFormElementGetObjByName($oForm, "timezone")
    local $oButton = _IEGetObjById($oIE, "submit")
;~  _IEFormElementSetValue($ofile, $lfile) ----> Browser security prevents SetValue of TYPE=FILE
    _IEFormElementOptionSelect($oserver,$lserver,1,"byText")
    _IEFormElementOptionSelect($otimezone,$ltimezone,1,"byText")
    _IEAction($ofile,"click")
 
Le problème est que juste après avoir cliqueré sur parcourir (et que la popup Windows me demandant le fichier de log apparaisse) le script se bloque et plus rien ne se passe.

J'ai mis un simple MsgBox après _IEAction($ofile,"click") et il faut attendre que la popup windows se ferme pour que le script continue et affiche la MsgBox.

Ma question est comment puis-je interagir sur cette fameuse popup pour définir le fichier à mettre sur champ input?

D'avance merci.
drakonash
Niveau 1
Niveau 1
Messages : 2
Enregistré le : mar. 29 oct. 2013 15:16
Status : Hors ligne

Re: [...] Controler interface web <input type=FILE>

#2

Message par drakonash »

Up.
Avatar du membre
DavidRobin33
Niveau 1
Niveau 1
Messages : 11
Enregistré le : jeu. 28 nov. 2013 16:40
Localisation : BORDEAUX
Status : Hors ligne

Re: [...] Controler interface web <input type=FILE>

#4

Message par DavidRobin33 »

Bonjour,
J'ai exactement le même problème. Une fois la fenêtre Windows ouverte depuis le bouton "Parcourir" de IE, le script AutoIt est bloqué comme si cette fenêtre était ouverte en "showmodal"... Toutes mes tentatives de contournement ont échouées (Send, ControlSetText, ControlSend, _IEPropertySet).
Donc pas de bonne nouvelle à annoncer (désolé). Je cherche depuis un certain temps maintenant et je ne désespère pas (encore). Si je trouve, je ne manquerai pas de vous l'indiquer ici.

David
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Controler interface web <input type=FILE>

#5

Message par mikell »

La seule chose qui fonctionne sur mon XP c'est ça

Code : Tout sélectionner

#include <IE.au3>

$oIE = _IE_Example("form")
$oT = _IEGetObjByName($oIE, 'fileExample')
MouseMove(_IEPropertyGet($oT, "screenx") + _IEPropertyGet($oT, "width") - 10, _
          _IEPropertyGet($oT, "screeny") + _IEPropertyGet($oT, "height")/2, 0)
MouseClick("left")
WinWait("Choisir un fichier à télécharger")
$hChoose = WinGetHandle("Choisir un fichier à télécharger")
ControlSetText($hChoose, "", "Edit1", "C:\AUTOEXEC.BAT")
ControlClick($hChoose, "", "Button2")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
DavidRobin33
Niveau 1
Niveau 1
Messages : 11
Enregistré le : jeu. 28 nov. 2013 16:40
Localisation : BORDEAUX
Status : Hors ligne

[R] Controler interface web <input type=FILE>

#6

Message par DavidRobin33 »

Merci mikell, cela fonctionne parfaitement ! :D (sous SEVEN 64 / IE 11)
Je n'avais pas encore essayé cette solution. Vous aviez pourtant déjà donné le lien :oops:
Merci pour ce rappel...

David
Répondre