Das Element liegt in einem iFrame, und Set-of-Mark übergeht es
Ein Zahlungsmodul, ein eingebetteter Editor, ein Formular eines Drittanbieters. Die Nummerierung endet am Rand des Rahmens – und dieser Rand ist eine Sicherheitsgrenze des Browsers, kein Versehen.
Das Symptom. Die Aufnahme zeigt ein Formular – ein Zahlungsmodul, einen
eingebetteten Editor, ein Buchungsmodul eines Drittanbieters. Set-of-Mark
nummeriert alles darum herum und nichts darin. cliquer_som erreicht es nicht,
und ein einfaches cliquer mit CSS-Selektor findet auch nichts.
Warum die Nummerierung dort endet
Ein iFrame ist ein eigenes Dokument. Stammt es von einem anderen Ursprung, verbietet der Browser der Seite – und jedem Skript darin –, hineinzugreifen. Das ist eine harte Sicherheitsgrenze, und eine gute: Sie verhindert, dass eine Website den Inhalt eines eingebetteten Zahlungsrahmens liest.
Das ist etwas anderes als Shadow DOM, eine Kapselung innerhalb desselben
Dokuments, die --shadow-dom durchqueren kann. Hier hebt keine Option die
Grenze auf, denn das wäre eine Sicherheitslücke im Browser.
Zwei eigene Aktionen überqueren sie sauber
Playwright greift über das Debugging-Protokoll in Rahmen hinein, statt Skript einzuschleusen – legitim, wo das Einschleusen es nicht wäre. Diwall stellt das als zwei Aktionen bereit:
{"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 unterstützt depuis_secrets und depuis_secrets_totp genau
wie remplir – Zugangsdaten in einem Rahmen werden weiterhin im
Browserprozess aufgelöst und nie ins Szenario geschrieben.
force: true gibt es auch bei cliquer_iframe: Die Interaktionsregeln von
Playwright gelten im Rahmen wie außerhalb.
Ein iFrame in einem iFrame
iframe_selecteur zielt auf einen Rahmen der obersten Ebene. Verschachtelte
Rahmen verlangen einen Abstieg durch jede Ebene, der Reihe nach:
{"type": "cliquer_iframe",
"iframe_chemin": ["iframe#wrapper", "iframe#payment"],
"selecteur": "button.confirm"}
Ein geordnetes Array, ein CSS-Selektor pro Verschachtelungsebene. Die beiden Formen schließen sich aus – die eine oder die andere, nicht beide.
Die Grenze, klar gesagt
Im Rahmen gibt es keine Set-of-Mark-Nummerierung. Den inneren CSS-Selektor müssen Sie selbst liefern.
Woher Sie ihn bekommen: Ist das iFrame vom selben Ursprung, kann ein evaluer
ihn lesen – document.querySelector('iframe').contentDocument. Stammt es von
einem anderen Ursprung, liefert die Seite ihn nicht: Lesen Sie die
Dokumentation des Drittanbieters, oder öffnen Sie die Adresse des Rahmens
direkt im Browser und untersuchen Sie ihn dort.
Das ist ein erster Durchbruch, keine vollständige Wahrnehmung von iFrames. Das zu sagen, nützt mehr, als Sie es an einem Formular merken zu lassen, das sich nicht ausfüllen lässt.
Kurz gesagt
- Kein Set-of-Mark in einem iFrame, und keine Option ändert das.
cliquer_iframe/remplir_iframemitiframe_selecteurfür eine Ebene.iframe_chemin– ein geordnetes Array – für verschachtelte Rahmen.- Zugangsdaten werden in Rahmen genauso aufgelöst wie außerhalb.
- Sie liefern den inneren Selektor; Diwall liefert den Übergang.