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_iframeaveciframe_selecteurpour 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.