Diwall

Français
Télécharger 1.24.4

L’élément est dans une iframe, et Set-of-Mark l’ignore

Un module de paiement, un éditeur intégré, un formulaire tiers. La numérotation s’arrête au bord du cadre — et ce bord est une frontière de sécurité du navigateur, pas un oubli.

Le symptôme. La capture montre un formulaire — un module de paiement, un éditeur intégré, un module de réservation tiers. Set-of-Mark numérote tout ce qui l’entoure et rien de ce qu’il contient. cliquer_som ne peut pas l’atteindre, et un simple cliquer avec un sélecteur CSS ne trouve rien non plus.

Pourquoi la numérotation s’arrête là

Une iframe est un document à part. Quand elle vient d’une autre origine, le navigateur interdit à la page — et à tout script qui y tourne — d’y entrer. C’est une frontière de sécurité stricte, et heureusement : c’est elle qui empêche n’importe quel site de lire le contenu du cadre de paiement qu’il intègre.

Rien à voir avec le Shadow DOM, qui est une encapsulation à l’intérieur du même document et que --shadow-dom sait traverser. Ici, aucune option ne peut lever la frontière, parce que la lever serait une faille du navigateur.

Deux actions dédiées la franchissent proprement

Playwright entre dans les cadres par le protocole de débogage plutôt qu’en injectant du script, ce qui est légitime là où l’injection ne le serait pas. Diwall l’expose sous forme de deux actions :

{"type": "cliquer_iframe", "iframe_selecteur": "iframe#payment",
 "selecteur": "button.confirm"}

{"type": "remplir_iframe", "iframe_selecteur": "iframe#payment",
 "selecteur": "input[name=cvv]",
 "valeur": "depuis_secrets", "secret_cle": "cvv"}

remplir_iframe accepte depuis_secrets et depuis_secrets_totp exactement comme remplir — un identifiant dans un cadre est toujours résolu dans le processus du navigateur, jamais écrit dans le scénario.

force: true existe aussi sur cliquer_iframe : les règles d’interactivité de Playwright s’appliquent dans le cadre comme en dehors.

Une iframe dans une iframe

iframe_selecteur vise un cadre de premier niveau. Les cadres imbriqués demandent de descendre chaque niveau, dans l’ordre :

{"type": "cliquer_iframe",
 "iframe_chemin": ["iframe#wrapper", "iframe#payment"],
 "selecteur": "button.confirm"}

Un tableau ordonné, un sélecteur CSS par niveau d’imbrication. Les deux formes s’excluent — l’une ou l’autre, pas les deux.

La limite, dite simplement

Il n’y a pas de numérotation Set-of-Mark dans le cadre. Le sélecteur CSS intérieur, c’est à vous de le fournir.

Où le trouver : si l’iframe est de même origine, un evaluer peut le lire — document.querySelector('iframe').contentDocument. Si elle est d’une autre origine, la page ne vous le donnera pas : lisez la documentation du tiers, ou ouvrez directement l’adresse du cadre dans un navigateur et inspectez-le là.

C’est un premier déblocage, pas une perception complète des iframes. Le dire vaut mieux que de vous le laisser découvrir sur un formulaire qui refuse de se remplir.

En bref

  • Pas de Set-of-Mark dans une iframe, et aucune option n’y changera rien.
  • cliquer_iframe / remplir_iframe avec iframe_selecteur pour un niveau.
  • iframe_chemin — un tableau ordonné — pour les cadres imbriqués.
  • La résolution des identifiants marche dans les cadres exactement comme dehors.
  • Vous fournissez le sélecteur intérieur ; Diwall fournit le passage.