Wie kann ich den Safari-JavaScript-Warndialog mit AppleScript identifizieren?

Auf einer besonders „lästigen“ Website erscheint ein Dialogfeld, um die automatische Eingabe des Benutzer-ID-Eingabefelds zu blockieren (oder abzudecken).

Ich habe den folgenden Code verwendet, um eine Referenz zu erhalten und dieses Fenster zu schließen, war aber erfolglos.

tell application "System Events"
    key code 15 using {command down}
    key code 36        // return key

end tell

tell application "System Events" to tell process "Safari"
    set numSheets to (count of sheets) & " sheets" as text       // 0 sheets
end tell

set numDocuments to (count of documents) & " documents" as text  // 1 documents
set numWindows to (count of windows) & " windows" as text        // 1 sheets

Was ist sonst noch verfügbar, um dieses Warnfeld zu finden und zu schließen?

Bearbeiten: key code 36Manchmal wird die Warnung geschlossen, und manchmal, wenn sie nicht vorhanden ist, wird die Seite zu früh gesendet.

Wird das "Dialogfeld" vom Betriebssystem oder vom Browser gerendert? Anders gesagt, können Sie das "Dialogfeld" aus dem Browserfenster ziehen?
Tolle Frage. Es kann außerhalb der Grenzen des Safari-Fensters gezogen werden. Ich habe die Warnmeldung im Code in einer enthaltenen .js-Datei auf der Seite gefunden.
Sie besuchen also eine Website, die ein Eingabefeld für die Benutzer-ID hat, aber die Website startet ein Warnfenster über dem Eingabefeld, um es zu verschleiern?
Ja. Intermittierend. Die Warnung besagt, dass ein Teil eines Java-Applets nicht geladen wurde.
Wenn Sie also das Warnfenster schließen, können Sie sich anmelden, okay? Haben Sie versucht, die Leute, die die Website pflegen, zu kontaktieren, um vorzuschlagen, dass sie sie reparieren?
Ja das stimmt. Es ist der Standort einer brasilianischen Regierungsbank. ...Haha. Andere Alternativen sind, sie zu kontaktieren und nach einer API zu fragen oder meine eigene Lösung zu finden.

Antworten (1)

Wenn ein Warndialog mit einer OK-Schaltfläche angezeigt wurde, würde dieser AppleScript-Code ihn schließen.

tell application "System Events" to tell process "Safari"
    if exists (button "OK" of window 1) then
        click (button "OK" of window 1)
    end if
end tell

Sie müssen dies wahrscheinlich an Ihre genaue Situation anpassen. Wenn der Alarmdialog mit einem Titel angezeigt wird, können Sie diesen wie unten angegeben angeben.

tell application "System Events" to tell process "Safari"
    if exists (button "OK" of window "Java applet missing") then
        click (button "OK" of window "Java applet missing")
    end if
end tell

Eine andere Möglichkeit wäre, die Warnung durch Verwendung von „Frontscheibe“ wie im folgenden Beispiel zu identifizieren (vorausgesetzt, die Warnung ist die Frontscheibe).

tell application "System Events" to tell process "Safari"
    if exists (button "OK" of front window) then
        click (button "OK" of front window)
    end if
end tell

Hoffe das hilft.

Eindrucksvoll. Danke schön. Damit werde ich spielen. Was ist, wenn die Warnung KEINEN Titel hat?
Angenommen, Sie haben nur ein Safari-Fenster geöffnet, dann sollte das erste Beispiel funktionieren, in dem Sie nur den Index des Fensters angeben.
Das erste Beispiel funktioniert. Könnte die Anzahl der Fenster immer = 1 (vorher) sein, weil die obige Frage (Anzahl der Fenster) drin ist tell application "Safari"?
Die Anzahl der Fenster ändert sich. Es ist einfach, wie es scheint, eine Zählung der geöffneten Fenster. Wenn Sie also ein Fenster geöffnet haben, gibt "count of windows" 1 zurück. Wenn ein Warnfenster geöffnet wird, gibt "count of windows" 2 zurück. Beachten Sie, dass die Fenster von Null aus indiziert werden. Das erste Fenster ist also 0. Das zweite ist 1. Und so weiter...
Ich habe die Antwort mit einer anderen Option ("Frontfenster") zum Identifizieren des Warnfensters aktualisiert.