Diwall

Deutsch
Herunterladen 1.24.4

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_iframe mit iframe_selecteur fü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.