[R] IE téléchargement d'un fichier automatisé

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

[R] IE téléchargement d'un fichier automatisé

#1

Message par A2Energie »

Bonjour amis autoitiens,

J'ai un problème de téléchargement d'un fichier (pdf) via IE
J'ai dû mal à expliquer mon problème donc autant dire que ca commence mal :lol:

Cela fait plusieurs années (oui oui) certains problèmes tiennent aux baskettes.
Que je tente de télécharger un fichier (pdf) via IE.
Biensure j'ai trouvé depuis la manière de contourner le problème mais aujourd'hui j'affronte une nouvelle fois ce problème.
; $IEObjets = Objet Internet
; $IEHwnd = $IEObjets.Hwnd
$IE_Lien = "http://www.monsite/identifiant/4321" ; Le document ce trouve à cet l'emplacement

InetGet($IE_Lien, "Emplacement sur mon DD.pdf") ; J'ai essayé avec Inetget, mais cela ne fonctionne pas : Fichier pdf créé vide.

$IEObjets.navigate($IE_Lien) ; Donc j'essaye en cliquant dessus : Cela fonctionne très bien
; Mais un fouchtre popup internet explorer vient me détruire la simplicité de mon script la voici :
ControlCommand($IEHwnd, "", "[CLASS:Frame Notification Bar; INSTANCE:1]", "Isvisible", "") ; possible aussi de la trouver sous la class [CLASS:DirectUIHWND; INSTANCE:1]
Voici l'exemple de la fenetre popup de téléchargement de IE : http://i.stack.imgur.com/WBNI3.png
Après moultes recherche, je sais que passer par la fenetre popup de IE ne peut pas être résolu sans devoir faire des controlsend ou des controlclick
Donc j'aimerais essayer d'avoir un script plus propre que de faire des controlsend ceci controlsend cela ou des controlclick parci controlclick parla
La méthode de l'inetget pourrait être une super solution simple et pratique
mais ce qui est étrange c'est que mon lien "http://www.monsite/identifiant/4321" ne se termine pas par un .pdf,
Voila je suis un peut perdu et j'espère avoir donné suffisement d'éléments.
Pour info, le site ne peut pas être consulté car il s'agit d'une session protégé par Mdp, donc pas possible de vous montrer l'exemple. Mais dans le html de la page, rien d'autre que "http://www.monsite/mapage/identifiant/4321" fait référence au document à télécharger.
:bisou:
Modifié en dernier par A2Energie le lun. 30 janv. 2017 18:19, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#2

Message par mikell »

InetGet ne marchera pas parce qu'il n'y a pas de lien direct vers le fichier
ça pourrait peut-être se faire avec WinHttp mais impossible d'en dire plus sans étudier la page, désolé
" 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
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#3

Message par walkson »

Bonjour,
InetGet($IE_Lien, "Emplacement sur mon DD.pdf") ; J'ai essayé avec Inetget, mais cela ne fonctionne pas : Fichier pdf créé vide.
Il semblerait que ce soit du à l'adresse incomplète => $IE_Lien = "http://www.monsite/identifiant/4321"
Pour l'avoir, afficher le PDF dans IE ou autre
Sur l'exemple ci-dessous, aucun problème
#include <InetConstants.au3>
#include <MsgBoxConstants.au3>

; Download a file in the background.
; Wait for the download to complete.

Example()

Func Example()
   ; Save the downloaded file to the temporary folder.
   Local $sFilePath = @ScriptDir & "\update.pdf"

   ; Download the file by waiting for it to complete. The option of 'get the file from the local cache' has been selected.
   Local $iBytesSize = InetGet("http://www.cjoint.com/doc/16_12/FLknuHuFltM_loisapin2.pdf", $sFilePath, $INET_FORCERELOAD)

   ; Retrieve the filesize.
   Local $iFileSize = FileGetSize($sFilePath)

   ; Display details about the total number of bytes read and the filesize.
   MsgBox($MB_SYSTEMMODAL, "", "The total download size: " & $iBytesSize & @CRLF & _
         "The total filesize: " & $iFileSize)


EndFunc   ;==>Example
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#4

Message par orax »

A2Energie a écrit :mais ce qui est étrange c'est que mon lien "http://www.monsite/identifiant/4321" ne se termine pas par un .pdf
il s'agit d'une session protégé par Mdp
Mais dans le html de la page, rien d'autre que "http://www.monsite/mapage/identifiant/4321" fait référence au document à télécharger.
Il n'y a pas toujours besoin d'avoir le lien direct du document. Voici deux exemples où InetRead récupère le contenu de test.txt. Pour le premier InetRead, il n'y a pas une référence directe au document à télécharger, mais ça fonctionne quand même.
ConsoleWrite( BinaryToString(InetRead('http://au3.96.lt/test_inetget')) & @CRLF) ; pas de lien direct ; l'emplacement exact de "test.txt" est caché
ConsoleWrite( BinaryToString(InetRead('http://au3.96.lt/test/test.txt')) & @CRLF) ; lien direct vers le fichier
Dans le premier exemple l'URL est réécrite par le serveur : test_inetget est "réécrit" en test/test.txt. C'est transparent pour le navigateur, mais peut-être que dans ton cas c'est différent, il y aura peut-être besoin de récupérer le lien direct. En tout cas, dans un premier temps, il faut pouvoir s'identifier sur le site, car si l'accès est protégé, même en ayant le lien direct, tu ne pourras pas télécharger le fichier.

Il y a des exemples sur la page Se connecter à un site/forum afin de récupérer le code source. Dans mon message #6 j'utilise InetRead pour m'authentifier au site, mais il est préférable d'utiliser WinHttp pour s'authentifier (voir message #10).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#5

Message par A2Energie »

Bonjour et vraiment désolé pour le temps de réponse.

Merci pour vos trois réponse très différentes.

@Mikell : j'ai pas encore essayé Winhttp, je ne connaissais d’ailleurs pas.
Ca me parait un peut complexe donc je vais prendre le temps de comprendre comment il fonctionne.
Et dans le cas ou cela fonctionne, je posterais la solution.
Merci pour ta solution.

@Walkson : Ta solution ne fonctionne pas, iniget n'aillant pas d'extension : (par exemple .pdf)
Biensure, j'ai essayé en rajoutant un .pdf au lien, mais pas de chance, cela ne fonctionne pas non plus.
Ca doit être un peu plus complexe.
Merci pour ta réponse.

@Orax : J'avais essayé cette solution mais en téléchargant directement la page sous format .htm
J'avais intégré l'extension .htm au lien et le résultat etait assez identique : Inetget("http://www.monsite/mapage/identifiant/4321.htm", ...
Le problème étant que la page est sécurisée. Je ne peux donc pas voir son contenu, en tout cas, pas de cette manière à priori.
C'est étrange que je ne puisse pas téléchrager le contenu de la page alors que si je clique dessus cela fonctionne.
Voici une partie de ce que inetread me retourne (j'ai fais un Filewrite("EmplacementLocal, inetread(...)))
<div id="connect">
    <div id="login">
        <form id="auth" method="post" action="/mapage/identifiant/4321">
            <fieldset>
                <div class="section"><label for="email" class="label required">Votre adresse email</label>
                       <input type="text" name="email" id="email" value="" autofocus="1" size="40" maxlength="255" /></div>
                <div class="section"><label for="mot_de_passe" class="label required">Mot de passe</label>
                        <input type="password" name="mot_de_passe" id="mot_de_passe" value="" size="16" maxlength="16" /></div>
<p class="buttons">
<button name="submit" id="submit" type="submit" class="button submit">Connexion</button></p>
            </fieldset>
        </form>
    </div>
</div>
Merci encore à vous trois pour l'aide que vous me fournissez.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#6

Message par mikell »

Dans l'image du popup IE de ton post #1, il y a un nom de fichier mentionné avec une extension .csv
Je suppose que la flèche à côté du bouton Save est là pour te proposer différents formats pour le téléchargement du fichier
Si c'est le cas, ça sent fort le script et je ne vois pas comment résoudre le problème autrement que par WinHttp

Si tu ne fournis pas le code source complet de la page de téléchargement après authentification, on ne pourra te donner que des indications artistiquement floues (et très probablement inutilisables)
" 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
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#7

Message par orax »

Que retourne le code suivant (surtout les premières lignes qui indiquent le code de réponse et les en-têtes) ? Normalement, il devrait t'authentifier.
Local $oWinHttpReq = ObjCreate("WinHttp.WinHttpRequest.5.1")

; connexion
$oWinHttpReq.Open("POST", "http://EXAMPLE.COM/mapage/identifiant/4321", False)
$oWinHttpReq.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oWinHttpReq.Send("email=MON_EMAIL@EXAMPLE.COM&mot_de_passe=MON_MOT_DE_PASSE")
ConsoleWrite($oWinHttpReq.Status & " " & $oWinHttpReq.StatusText & @CRLF & $oWinHttpReq.GetAllResponseHeaders() & @CRLF & $oWinHttpReq.ResponseText & @CRLF)
Il faudra modifier certaines parties et je pense qu'il faudra "encoder" :
email=MON_EMAIL@EXAMPLE.COM&mot_de_passe=MON_MOT_DE_PASSE
Cette ligne devrait plutôt ressembler à :
email%3DMON_EMAIL%40EXAMPLE.COM%26mot_de_passe%3DMON_MOT_DE_PASSE
On peut le faire avec http://meyerweb.com/eric/tools/dencoder/
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#8

Message par A2Energie »

Bonjour,

Merci à vous deux,

@Mikell : En faite l'image au post 1 était une image prise sur google :) en effet on y voit .csv mais en réalité il s'agit bien d'un pdf. c'était pour montrer le type de fenetre qui pop.
WinHttp a l'air vraiment puissant. Merci de me l'avoir fait découvrir je pense qu'il me sera très utile à l'avenir.
Et en effet désolé de ne pas tout montrer mais je suis sans doute trop parano :mrgreen:

@Orax : Voici le début de la réponse de la boite de dialogue.pour la suite du code, les id et mdp ont disparus mais aucun lien caché n'est visible et aucun script java ne correspond au document caché. Je pourrrais vous envoyer toutes les informations dans le détail si vraiment besoin. id et mdp compris
La suite : -----
200 OK
Cache-Control: no-store, no-cache, must-revalidate
Connection: Keep-Alive
Date: Fri, 27 Jan 2017 10:51:35 GMT
Keep-Alive: timeout=5, max=99
Pragma: no-cache
Via: 1.1 www.monsite.fr
Content-Length: 4974
Content-Type: text/html; charset=UTF-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Apache/2.4.18 (Ubuntu)
Vary: Accept-Encoding
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé

#9

Message par mikell »

Je pourrrais vous envoyer toutes les informations dans le détail si vraiment besoin. id et mdp compris
Bin oui... seul moyen pour vraiment avancer sans passer son temps à tatonner
Je comprends tes réticences et te suggère d'envoyer ça par MP à orax (ou à moi)
" 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
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: IE téléchargement d'un fichier automatisé  

#10

Message par A2Energie »

Bonjour,

Pour les futurs lecteurs,
Je vous post la solution :
Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")

$oHTTP.Open("POST", "http://www.monsite/", False)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-url")
$oHTTP.Send("email=mon_identifiant&mot_de_passe=mon_mdp")

$oHTTP.Open("GET", "http://www.monsite/mapage/identifiant/4321", False)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-url")
$oHTTP.Send()
$sData = $oHTTP.ResponseBody
FileWrite("C:\Users\Test.pdf", $sData)
$oHTTP = 0
Sujet résolu, merci Mikell (et Orax) :bisou:
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] IE téléchargement d'un fichier automatisé

#11

Message par orax »

Ça marche mais je pense qu'il en manque une partie (encoded).
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-url[b][highlight=yellow]encoded[/highlight][/b]")
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre