Jak zidentyfikować okno dialogowe Alert JavaScript Safari za pomocą AppleScript?

2

Na szczególnie „nieznośnej” stronie internetowej pojawia się okno dialogowe blokujące (lub zakrywające) automatyczne wprowadzanie pola wprowadzania identyfikatora użytkownika.

Użyłem następującego kodu, próbując uzyskać odwołanie i zamknąć to okno, ale nie powiodło się.

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

Co jeszcze można znaleźć i zamknąć to pole alertu?

Edycja: key code 36Czasami zamknie alert, a innym razem, gdy go nie ma, prześle stronę zbyt wcześnie.

David C.
źródło
1
Czy „okno dialogowe” jest renderowane przez system operacyjny lub przeglądarkę? Innymi słowy, czy możesz przeciągnąć „okno dialogowe” z okna przeglądarki?
Alistair McMillan
Świetne pytanie. Można go wyciągnąć poza granice okna Safari. Znalazłem komunikat ostrzegawczy w kodzie w dołączonym pliku .js na stronie.
David C
Więc odwiedzasz witrynę, która ma pole wejściowe dla identyfikatora użytkownika, ale strona internetowa uruchamia okno alertu nad polem wejściowym, aby je zasłonić?
Alistair McMillan
Tak. Z przerwami. Alert mówi, że część apletu Java nie została załadowana.
David C
1
Więc jeśli zamkniesz okno alertu, możesz się zalogować, dobrze? Czy próbowałeś skontaktować się z osobami, które prowadzą stronę internetową, aby zasugerować jej naprawę?
Alistair McMillan

Odpowiedzi:

4

Jeśli pojawi się okno dialogowe z ostrzeżeniem z przyciskiem OK, kod AppleScript go zamknie.

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

Prawdopodobnie będziesz musiał dostosować to do swojej dokładnej sytuacji. Jeśli pojawi się okno dialogowe z ostrzeżeniem, możesz to wszystko określić w sposób opisany poniżej.

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

Inną opcją byłoby zidentyfikowanie alertu za pomocą „przedniego okna”, jak w poniższym przykładzie (zakładając, że alert to przednie okno).

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

Mam nadzieję że to pomoże.

Alistair McMillan
źródło
Niesamowite. Dziękuję Ci. Będę z tym grać. Co jeśli alert nie ma tytułu?
David C
Zakładając, że masz otwarte tylko jedno okno Safari, powinien zadziałać pierwszy przykład, w którym właśnie podałeś indeks okna.
Alistair McMillan
Pierwszy przykład działa. Czy liczba okien zawsze = 1 (poprzednio), ponieważ powyższe pytanie (liczba okien) jest w środku tell application "Safari"?
David C
Liczba okien się zmieni. To po prostu to, co się wydaje, liczba otwartych okien. Więc jeśli masz otwarte jedno okno, wówczas „liczba okien” powróci 1. Jeśli otworzy się okno alertu, wówczas „liczba okien” powróci 2. Zwróć uwagę, że okna są indeksowane od zera. Więc pierwsze okno to 0. Drugie to 1. I tak dalej ...
Alistair McMillan
1
Zaktualizowałem odpowiedź o inną opcję („przednie okno”) do identyfikacji okna alertu.
Alistair McMillan