Cómo hacer clic en el botón Aceptar en la alerta de Google Chrome, usando AppleScript

Estoy usando AppleScript con Google Chrome para automatizar un proceso tedioso en un sitio web. En ciertas condiciones, el sitio web tiene una ventana emergente de alerta para notificar al usuario sobre un problema. Esto evita que se complete el resto de la secuencia de comandos del automatizador. Necesito detectar esta ventana emergente, registrarla en un archivo (ya lo tengo resuelto) y hacer clic en el botón Aceptar para continuar. El código que tengo actualmente se ve así:

on run args
repeat with catNum in args
    tell application "Google Chrome"
        set myurl to "http://database.com/whatever"
        open location myurl
        delay 1
        tell active tab of window 1
            -- Click the button that needs to be clicked
            execute javascript "document.getElementById('verbatimCoordinatesDiv').getElementsByTagName('div')[0].getElementsByTagName('a')[0].click()"

            -- What I need to do:
            -- If (popup alert) then
                -- do shell script "echo Issue with " & catNum & " > templog.txt"
                -- Click ok button on popup
            -- else
                -- This clicks the save button
                execute javascript "document.getElementById('editButtonDiv').getElementsByTagName('input')[0].click()"
            -- end if

            delay 1
        end tell
        delay 1
        -- Close the tab
        delete tab (active tab index of window 1) of window 1
    end tell
end repeat
end run

Hasta ahora, lo que tengo funciona bien cuando no hay un mensaje emergente, sin embargo, requiere una intervención manual cuando se activa una ventana emergente. A continuación se muestra una captura de pantalla de la ventana emergente y la ventana del Inspector de accesibilidad.

Ventana del inspector de accesibilidad y ventana emergente

EDITAR: Aquí hay una versión simplificada de lo que estoy tratando de hacer, pero en un sitio público. Parece que la alerta de javascript impide que suceda algo en el navegador hasta que se haga clic manualmente en Aceptar.

tell application "Google Chrome"
    -- Go to the website with the javascript button
    set myurl to "http://t4t5.github.io/sweetalert/"
    open location myurl
    delay 1
    tell active tab of window 1
        -- Click the normal javascript button on the page
        execute javascript "document.getElementsByTagName('button')[1].click()"
    end tell
    -- Delete the tab when done
    delete tab (active tab index of window 1) of window 1
end tell

Respuestas (2)

Puede usar una función para window.alertinterceptar cualquier alerta y para cancelar esta alerta , use una variable para ver si hubo un intento de alerta.

Como esto :

tell application "Google Chrome"
    -- Go to the website with the javascript button
    set myurl to "http://t4t5.github.io/sweetalert/"
    open location myurl
    delay 1
    tell active tab of window 1
        -- Click the normal javascript button on the page
        set popupAlert to execute javascript "var isAlert=false; (function() {window.alert = function() {isAlert=true; return;};})(); document.getElementsByTagName('button')[1].click(); isAlert"
        if popupAlert = "true" then -- This page has attempted to display an alert.
            do shell script "echo 'Issue with github.io' > templog.txt"
        else -- no alert, continue
            -- This clicks the save button
        end if
    end tell
    -- Delete the tab when done
    delete (get active tab of window 1)
end tell

Puede utilizar el Inspector de accesibilidad de AppleScript o alguna variante de este script para obtener el nombre de la ventana de diálogo, el texto que contiene o alguna otra característica de identificación. Si su secuencia de comandos encuentra esa información, significa que ha aparecido el cuadro de diálogo y puede tomar medidas.

-- Entire Contents Demo - mini
-- BP ages ago or so

-- This'll get all the controls and structures associated with an App's window and menus
-- In a form which is easily pasteable into your own scripts
-- and show them in the result pane below.
--
-- Copy that into a text editor and change commas to returns to get an easily readable list.
--
-- The script can take a long time if there are LOTS of window items, such as
-- in the "music" pane of iTunes. It may even time out if you have a huge iTunes library
-- The script'll process most App's UI structures in under a minute

set appname to "System Preferences" -------------------------- Set this to the App you want to look at

set winstuff to "defaultval"
set menustuff to "defaultval"

tell application appname
activate
end tell

tell application "System Events"
tell process appname
set winstuff to entire contents of front window
set menustuff to entire contents of menu bar 1
end tell
end tell
--return winstuff & "rrrr" & menustuff -- comment this out to get just winstuff
return winstuff -- comment this out too to get just menustuff
--return menustuff 
Así que he usado el Inspector de accesibilidad para tratar de encontrar información en la ventana, sin embargo, tiene un nombre de ventana en blanco y no puedo encontrar la manera de enfocarlo. Edité mi pregunta original con una captura de pantalla de la ventana emergente y la ventana del Inspector de accesibilidad.
Debería poder probar la existencia de texto estático "La página en...", o incluso un botón "Aceptar". Cualquiera de ellos le permitirá saber que el cuadro de diálogo está activo. Pseudocódigo: "Si existe" AXButton: "OK" entonces....
He intentado un par de cosas ahora para buscar la ventana e intentar seleccionarla y hacer clic en el botón, sin embargo, parece que la ventana está bloqueando la ejecución de AppleScript. No tiene sentido para mí, pero cuando ejecuto mi secuencia de comandos, se bloquea hasta que hago clic manualmente en el botón Aceptar, independientemente de lo que esté tratando de hacer. ¿Es esto algo que es común?
Intente ingresar a través de la interfaz AX: Indique los eventos Sys de la aplicación Indique el valor del clic del nombre de la aplicación del proceso del atributo "AXDefaultButton" Vea aquí un ejemplo: discusiones.apple.com/thread/3921091?tstart=0 Apple ha hecho que algunas de estas estructuras sean opacas en el nombre de la seguridad, pero no creo que hayan llegado a los botones Aceptar en los productos de Google todavía. Si está ejecutando su secuencia de comandos como una aplicación, asegúrese de que tenga permiso de acceso a través de las preferencias de seguridad.
Estoy empezando a pensar que esto no es posible. Este enlace de discusión menciona que JavaScript bloquea la interfaz de usuario. Editaré mi publicación con un AppleScript que hace esencialmente lo que estoy haciendo, pero en un sitio público que todos pueden usar.