Error de conexión no válida al ejecutar Applescript y Safari

El siguiente applescript espera a que se cargue una página antes de continuar con la do javascript "document.body.innerText"parte del script. Parece funcionar muy bien excepto por una cosa. Si Safari se está ejecutando pero no hay ninguna ventana abierta actualmente, la ejecución de este script da como resultado

error "Safari recibió un error: la conexión no es válida". número -609

Sin embargo, si ejecuto esto cuando Safari está cerrado, inicia Safari, va a la URL especificada y, una vez que se carga la página, ejecuta la parte de javascript. No entiendo por qué aparece un error si Safari se está ejecutando sin ventanas abiertas.

tell application "Safari"
    activate
    if not (exists document 1) then reopen
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

El error siempre resalta la source as textparte del script. Intenté cambiar length of (source as text) is not 0a repeat until name is "example domain"pero el error aún ocurre si no hay ventanas abiertas y Safari se está ejecutando.

Respuestas (2)

Debe intercambiar la posición de la activatelínea de código con la if not (exists document 1) then reopenlínea de código .

Ejemplo:

tell application "Safari"
    if not (exists document 1) then reopen
    activate
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

La captura de pantalla del Editor de secuencias de comandos, a continuación, se ejecutó con Safari abierto y sin ninguna ventana abierta.

Ventana del editor de secuencias de comandos

Primero tuve que marcar "[√] Mostrar el menú Desarrollar en la barra de menú" (Safari > Preferencias... > Avanzado) y luego en el menú Desarrollar, hacer clic en "Permitir JavaScript de Apple Events". A continuación, copié y pegué su código AppleScript en el Editor de secuencias de comandos, hice clic en el botón Ejecutar la secuencia de comandos y se ejecutó sin errores y devolvió el texto de la página web http://example.com . Sin embargo, Safari estaba cerrado cuando ejecuté el script por primera vez.

Después de leer su pregunta nuevamente, pude reproducir el error al tener Safari abierto sin ninguna ventana abierta. Luego miré más detenidamente su código y noté activateque estaba antes if not (exists document 1) then reopeny activatedebe estar después para evitar el error.

activateNunca se me pasó por la cabeza estar en el lugar equivocado. Funciona perfectamente ahora. Gracias por resolver otra de mis preguntas relacionadas con Apple.

Restablecer mi archivo de preferencias solucionó esto para mí. Para hacer eso, mantenga presionadas las teclas Comando + Opción + Control + Mayús mientras abre la aplicación Indesign.

Indesign versión 15.0.1 Mac OS Catalina 10.15.7

Gracias por el voto negativo y la no explicación de dicho voto negativo. Esto realmente funcionó para mí.
Supongo que, dado que la pregunta es sobre AppleScript y Safari , ¿qué tiene que ver Indesign y presionar las teclas Comando + Opción + Control + Mayús con la pregunta formulada? ¿Por casualidad publicaste tu respuesta a la pregunta incorrecta?
No dejes que los votos negativos te depriman (sin juego de palabras). Es solo internet. ;) Aunque, no estoy seguro de qué tiene que ver Indesign con la pregunta.