¿Cómo identificar el cuadro de diálogo de alerta de Javascript de Safari usando AppleScript?

En un sitio web particularmente "molesto", aparece un cuadro de diálogo para bloquear (o cubrir) la entrada automática del cuadro de entrada del ID de usuario.

Utilicé el siguiente código para intentar obtener una referencia y cerrar esta ventana, pero no tuve éxito.

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

¿Qué más hay disponible para encontrar y cerrar ese cuadro de alerta?

Editar: a key code 36veces cerrará la alerta y otras veces, cuando no esté presente, enviará la página demasiado pronto.

¿El sistema operativo o el navegador representan el "cuadro de diálogo"? Dicho de otra manera, ¿puede arrastrar el "cuadro de diálogo" fuera de la ventana del navegador?
Gran pregunta. Se puede sacar fuera de los límites de la ventana de Safari. Encontré el mensaje de alerta en código en un archivo .js incluido en la página.
Entonces, ¿está visitando un sitio web que tiene un campo de entrada para el ID de usuario pero el sitio web está lanzando una ventana de alerta sobre el campo de entrada para ocultarlo?
Sí. Intermitentemente. La alerta dice que alguna parte de un applet de Java no se cargó.
Entonces, si cierra la ventana de alerta, puede iniciar sesión, ¿de acuerdo? ¿Ha tratado de ponerse en contacto con las personas que mantienen el sitio web para sugerir que lo arreglen?
Sí, eso es verdad. Es el sitio de un banco del gobierno brasileño. ...ja ja. Otras alternativas son contactarlos y preguntarles sobre una API o encontrar mi propia solución.

Respuestas (1)

Si apareciera un cuadro de diálogo de alerta con un botón Aceptar, este código AppleScript lo cerraría.

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

Es probable que necesite personalizar esto para que se ajuste a su situación exacta. Si el cuadro de diálogo de alerta aparece con un título, todos pueden especificarlo como se muestra a continuación.

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

Otra opción sería identificar la alerta usando "ventana frontal" como en el siguiente ejemplo (suponiendo que la alerta es la ventana frontal).

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

Espero que esto ayude.

Impresionante. Gracias. Jugaré con eso. ¿Qué pasa si la alerta NO tiene título?
Suponiendo que solo tiene una ventana de Safari abierta, entonces debería funcionar el primer ejemplo en el que solo especifica el índice de la ventana.
El primer ejemplo funciona. ¿Podría el número de ventanas siempre = 1 (anteriormente) porque la pregunta anterior (recuento de ventanas) está dentro tell application "Safari"?
El número de ventanas cambiará. Es simplemente lo que parece, un conteo de las ventanas abiertas. Entonces, si tiene una ventana abierta, el "recuento de ventanas" devolverá 1. Si se abre una ventana de alerta, el "recuento de ventanas" devolverá 2. Tenga en cuenta que las ventanas están indexadas desde cero. Así que la primera ventana es 0. La segunda es 1. Y así sucesivamente...
Actualicé la respuesta con otra opción ("ventana frontal") para identificar la ventana de alerta.