3 votos

AppleScript: Esperar a que la página de Safari se cargue completamente

Estoy usando este script para que Google Chrome ponga en pausa el script hasta que la página se cargue completamente:

tell application "Google Chrome"
        repeat until (loading of front window's tab 2 is false)
            1 + 1 --just an arbitary line
        end repeat
        loading of front window's tab 2 
    end tell 

Esto no parece funcionar con Safari, ¿algún equivalente?

14voto

qarma Puntos 71

1. AppleScript source propiedad

Puede intentar utilizar Safari 's source propiedad, que es "" hasta que el código HTML se cargue en él (lo que sólo puede hacerse una vez cargada la página). Tenga en cuenta, sin embargo, que esto no implica necesariamente que la página haya sido renderizado :

tell application "Safari"
     .
     .
    repeat while document 1's source = ""
        delay 0.5
    end repeat
     .
     .
end tell

El source se restablece a "" incluso entre cargas/recargas de páginas.

2. Elemento de interfaz de usuario del botón de recarga

Si quiere saber que una página está cargada y renderizado en pantalla, entonces un método fiable es determinar si el botón de la barra de URL es un botón de "recarga" (página cargada y renderizada), o un botón de "cancelación" (página aún cargando/renderizada):

tell application "System Events" to repeat until exists (buttons of ¬
    UI elements of groups of toolbar 1 of window 1 of ¬
    process "Safari" whose name = "Reload this page")

    delay 0.5
end repeat

3. JavaScript readyState propiedad

Si tiene Permitir JavaScript desde los eventos de Apple marcado en el Desarrollar y luego se puede acceder al menú readyState propiedad del document :

tell application "Safari"
     .
     .
    tell document 1 to repeat
        do JavaScript "document.readyState"
        if the result = "complete" then exit repeat
        delay 0.5
    end repeat
     .
     .
end tell

El document.readyState La propiedad JavaScript devuelve uno de los cinco valores:

  • uninitialized : Todavía no ha empezado a cargar
  • loading : Está cargando
  • loaded : Se ha cargado
  • interactive : Ha cargado lo suficiente y el usuario puede interactuar con él
  • complete : Totalmente cargado

1voto

user3439894 Puntos 5883

Si realmente quiero esperar hasta que la página esté completamente cargada, esta es una manera que he encontrado para ser más fiable que otros métodos que he encontrado para Safari :

Ejemplo AppleScript código :

tell application "Safari" to ¬
    make new document with properties ¬
        {URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}

tell application "System Events" to tell process "Safari" to ¬
    set reload_button to a reference to ¬
        (first button whose name is "Reload this page") of ¬
        UI element 1 of groups of toolbar 1 of window 1

using terms from application "System Events"
    repeat until the accessibility description ¬
        of the reload_button ¬
        contains "Reload this page"
        delay 0.25    -- # Adjust value of delay as appropriate.
    end repeat
end using terms from

-- # Code to run after the page is completely loaded goes here:

Adaptado para mi uso de la respuesta de CJK a <a href="https://apple.stackexchange.com/questions/319986/applescript-help-wait-for-safari-page-to-load/320105#320105">Ayuda de AppleScript: Esperar a que se cargue la página de Safari</a>


Nota: El ejemplo AppleScript código es sólo eso y no contiene ninguna gestión de errores como puede ser apropiado. Es responsabilidad del usuario añadir cualquier gestión de errores que sea apropiada, necesaria o deseada. Eche un vistazo al intente declaración y error declaración en el Guía del lenguaje AppleScript . Ver también Trabajar con errores .

0voto

En la respuesta aceptada "2. Botón de recarga del elemento UI" no me funcionó, pero aquí está lo que sí:

-- Safari Version 14.0.3 (15610.4.3.1.7, 15610)

tell application "Safari"
    --activate
    make new document with properties ¬
        {URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
end tell

tell application ¬
    "System Events" to tell process ¬
    "Safari" to tell group 2 of toolbar 1 of front window to ¬
    repeat until exists (first button where its accessibility description = "Reload this page")
        delay 0.5
    end repeat

-- Additional code as needed goes here:

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X