[..] Contenu d'une iframe introuvable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DavidRobin33
Niveau 1
Niveau 1
Messages : 11
Enregistré le : jeu. 28 nov. 2013 16:40
Localisation : BORDEAUX
Status : Hors ligne

[..] Contenu d'une iframe introuvable

#1

Message par DavidRobin33 »

Bonjour,
Après quelques heures de recherche infructueuse, je me permets de vous solliciter.
Je possède une page html qui contient une iframe dont voici le squelette (je peux fournir la page si besoin) :

Code : Tout sélectionner

<html>
  <head>...</head>
  <body>
    <iframe>
      <html>
        <head>...</head>
        <body>
            <button>...</button>
        </body>
      </html>
    </iframe>
  </body>
</html>
Et bien, je ne parviens pas à "trouver" le bouton afin de pouvoir cliquer dessus ensuite.
J'ai tenté tout simplement ce genre de chose :
Local $oFrame = _IEFrameGetObjByName($oIE, "HostedIFrame") ; @error = 0 et @extended = 0
Local $oButton = _IEGetObjById($oFrame, "finalizeButton")
Egalement la fonction "_IEFrameGetCollection" avec les exemples fournit dans la doc mais j'ai toujours un message du type "la variable doit être de type objet".

Merci d'avance de toute piste que vous seriez me proposer.
David
Avatar du membre
julie
Niveau 5
Niveau 5
Messages : 128
Enregistré le : sam. 28 janv. 2012 17:28
Status : Hors ligne

Re: [..] Contenu d'une iframe introuvable

#2

Message par julie »

peut tu donner la page en question stp ?
Avatar du membre
DavidRobin33
Niveau 1
Niveau 1
Messages : 11
Enregistré le : jeu. 28 nov. 2013 16:40
Localisation : BORDEAUX
Status : Hors ligne

Re: [..] Contenu d'une iframe introuvable

#3

Message par DavidRobin33 »

Bonjour,
Ma page est trop grosse, la voici en pièce jointe (MaPage.txt).

David
Fichiers joints
MaPage.txt
(69.59 Kio) Téléchargé 61 fois
Avatar du membre
DavidRobin33
Niveau 1
Niveau 1
Messages : 11
Enregistré le : jeu. 28 nov. 2013 16:40
Localisation : BORDEAUX
Status : Hors ligne

Re: [..] Contenu d'une iframe introuvable

#4

Message par DavidRobin33 »

Je viens de m'apercevoir que la page que je viens de fournir (via fonction CopyHTML de firebug) ne contient pas le contenu de la iframe. Voici donc le contenu de la iFrame "HostedIFrame" dans cette seconde pièce jointe.

David
Fichiers joints
iFrame.txt
(64.66 Kio) Téléchargé 67 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: [..] Contenu d'une iframe introuvable

#5

Message par mikell »

Pas évident :?
Faudrait tester ça pour voir si on arrive à se caler sur le bouton

Code : Tout sélectionner

#include <IE.au3>

;; $oIE = _IECreate(@scriptdir & "\MaPage.htm")
$oFrames = _IETagNameGetCollection($oIE, "iframe")
For $oFrame In $oFrames
   If $oFrame.id == "HostedIFrame" Then $addr = $oFrame.src
Next
;; Msgbox(4096, "", $addr)
_IENavigate($oIE, $addr)
Local $oButton = _IEGetObjById($oIE, "finalizeButton")
Msgbox(4096, "", $oButton.title)
" 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

Re: [..] Contenu d'une iframe introuvable

#6

Message par DavidRobin33 »

Merci mikell pour cette piste.
J'ai testé, la redirection fonctionne bien. Du coup, le contenu de la page contient bien le contenu de la iframe. J'ai donc bien mes boutons de visible mais étrangement le _IEGetObjById retourne un @error à 4 (ce qui ne correspond à rien dans la doc).
Pour info, un

Code : Tout sélectionner

Local $oButtons = _IETagNameGetCollection($oIE, "button")
retourne également un @error à 4 (Invalid Object Type).
Je continue mes recherches sur cette piste qui me semble la meilleure idée du moment :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Contenu d'une iframe introuvable

#7

Message par mikell »

ça vaudrait le coup de tenter ça (on ne sait jamais...)

Code : Tout sélectionner

$oIE.document.parentwindow.execScript("FinalizePayment(false)", "JavaScript")
Sinon peut-être essayer _IETagNameGetCollection($oIE, "span") en cherchant le texte "Valider le paiement"
Ah c'est dur quand on peut pas tester :mrgreen:
" 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

Re: [..] Contenu d'une iframe introuvable

#8

Message par DavidRobin33 »

Merci beaucoup pour toutes ces idées mais malheureusement aucune ne fonctionne.
Quelque soit la méthode par laquelle je passe et quelque soit ce que je recherche, un "$oMyObject.innerHtml" génère l'erreur 'Variable must be of type "Object"' !
Quant à l'exécution direct de la fonction via "ExecScript", c'est le même problème je pense, cela n'a pas d'effet puisque pas connue (la fonction est dans la iframe).
Je ne comprends même pas que ta solution du "_IENavigate" ne fonctionne pas !

Je me demande s'il ne s'agirait pas d'un problème de sécurité ? Ou un manque sur AutoIt pour IE 11 (je suis en v3.3.12) ?
Je continue mes recherches...

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: [..] Contenu d'une iframe introuvable

#9

Message par mikell »

Hum
Pour ce que j'ai pu en voir c'est un site sécurisé, je suis pas optimiste ... et faut des identifiants donc je peux rien tester :?
" 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

Re: [..] Contenu d'une iframe introuvable

#10

Message par DavidRobin33 »

Pour info, je crois avoir l’explication à mon problème : l'accès à une iFrame est possible uniquement lorsque la page redirigée provient du même domaine que la page d'origine. Il semble s'agir d'une contrainte de sécurité. Dans tous les cas, je constate bien se comportement au travers notre logiciel lorsque des redirections sont faites, alors que cela fonctionne bien lorsqu'il n'existe pas de redirection.

J'ai découvert pour la première fois cette piste au travers ce forum :
http://stackoverflow.com/questions/1445 ... lementbyid

Un wiki existe à ce sujet http://en.wikipedia.org/wiki/Same_origin_policy faisant référence au "World Wide Web Consortium" (http://www.w3.org/Security/wiki/Same_Origin_Policy)

Pour info, cela semble se confirmer suite aux différents tests réalisés sur FireBug.
Via javascript, un "document.getElementById('MaFrameID')" me trouve bien ma frame et me renvoie tous les attributs de cet élément. Tant dis que la récupération du contenu de cette frame par un "document.getElementById('MaFrameID').contentWindow.document" me renvoie un défaut de permission (cf. copie d'écran ci-dessous).

Si rien n'est possible au niveau du paramétrage du serveur, je crains qu'il s'agisse d'une limite à l'utilisation d'un automate, quelle qu'il soit.
Je vais essayer de voir prochainement pour ce dernier point.
Fichiers joints
firebug.jpg
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Contenu d'une iframe introuvable

#11

Message par orax »

Effectivement, "document.getElementById('MaFrameID').contentWindow.document" ne fonctionnera pas dans ce cas. Par contre, je ne vois pas pourquoi le _IENavigate() fait des caprices.
Local $oButtons = _IETagNameGetCollection($oIE, "button")
retourne également un @error à 4 (Invalid Object Type).
De ce que j'en ai compris, il vérifie que $oIE soit d'un type valide (via __IEIsObjType).
Par exemple dans le code que j'ai mis plus bas, après un _IENavigate(), ObjName($oIE) me retourne IWebBrowser2. Si ce n'est pas le cas, il y a peut-être un problème.

Code : Tout sélectionner

Sortie console :
@@ (21) :
@@ Debug(40) : {Object} -> 
    @error=0 @extended=0x00000000
nom  : IWebBrowser2
desc : Web Browser Interface for IE4.
► Afficher le textevoir le code !
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre