AppleScript: espere a que la página de Safari se cargue por completo

4

Estoy usando este script para Google Chrome para pausar el script hasta que la página esté completamente cargada:

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 

Parece que esto no funciona con Safari, ¿algo equivalente?

    
pregunta Kevin 24.11.2018 - 16:18

2 respuestas

5

1. AppleScript source propiedad

Puedes intentar usar la propiedad source de Safari , que es "" hasta que se cargue el código HTML (que solo se puede hacer una vez que se carga la página). Sin embargo, tenga en cuenta que esto no implica necesariamente que la página se haya procesado :

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

La propiedad source se restablece a "" incluso entre cargas / recargas de página.

2. Botón de recarga elemento de la interfaz de usuario

Si desea saber que una página está cargada y representada en la pantalla, un método confiable es determinar si el botón en la barra de URL es un botón "recargar" (página cargada y renderizada ), o un botón "cancelar" (la página aún se está cargando / renderizando):

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 Apple Events marcado en el menú Desarrollar , entonces puede acceder a la propiedad readyState de 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

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

  • uninitialized : aún no se ha iniciado la carga
  • loading : se está cargando
  • loaded : se ha cargado
  • interactive : Se ha cargado lo suficiente y el usuario puede interactuar con él
  • complete : Completamente cargado
respondido por el CJK 24.11.2018 - 17:01
1

Si realmente quiero esperar hasta que la página esté completamente cargada, aquí hay una forma que he encontrado que es más confiable 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 Ayuda de AppleScript: espere a que se cargue la página Safari

Nota: El ejemplo AppleScript código es solo eso y no contiene ningún manejo de errores como sea apropiado. El usuario tiene la responsabilidad de agregar cualquier manejo de errores que pueda ser apropiado, necesario o deseado. Eche un vistazo a la try statement and error sentencia en la Guía del lenguaje AppleScript . Vea también .

    

Lea otras preguntas en las etiquetas