La conexión es un error no válido al ejecutar Applescript y Safari

3

El siguiente applecript espera a que se cargue una página antes de continuar con la parte do javascript "document.body.innerText" del script. Parece funcionar muy bien, excepto por una cosa. Si Safari se está ejecutando pero actualmente no hay ninguna ventana abierta, 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é se produce 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 parte source as text del script. Intenté cambiar de length of (source as text) is not 0 a repeat until name is "example domain" , pero el error aún ocurre si no hay ventanas abiertas y Safari se está ejecutando.

    
pregunta I0_ol 28.07.2016 - 16:10

1 respuesta

2

Necesitas intercambiar la posición de la línea activate de código con la línea if not (exists document 1) then reopen 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.

Primerotuvequemarcar"[√] Mostrar el menú Desarrollar en la barra de menús" (Safari > Preferencias ... > Avanzadas) y luego en el menú Desarrollar, haga clic en "Permitir JavaScript desde Apple Events". Luego copié y pegué el código de AppleScript en el Editor de secuencias de comandos, hice clic en el botón Ejecutar la secuencia de comandos , se ejecutó sin errores y devolvió el texto de enlace página web. Sin embargo, Safari se cerró cuando ejecuté el script la primera vez.

Después de leer tu pregunta otra vez, pude reproducir el error al tener Safari abierto sin ninguna ventana abierta. Luego miré más detenidamente su código y noté que activate estaba antes de que if not (exists document 1) then reopen y activate deban estar detrás de él para evitar el error.

    
respondido por el user3439894 28.07.2016 - 16:54

Lea otras preguntas en las etiquetas