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

1

Estoy intentando crear un script para abrir la URL csbsju.instructure.com en Safari, esperar a que la página se cargue por completo, hacer clic en el botón de inicio de sesión y luego volver a verificar si la URL es correcta (hay un error eso agrega la barra lateral del panel de control, así que solo estoy revisando la URL y, si es incorrecta, redirigiendo la página. La escritura de las credenciales se maneja mediante la contraseña de iCloud de Safari, por lo que no tengo que preocuparme por eso. El gran problema que tengo es la espera hasta que se cargue la parte. He estado buscando y actualmente estoy intentando usar este código, aunque no funciona:

tell application "Safari"
    activate
    delay 1
    repeat
        if (do JavaScript "document.readyState" in document 1) is "complete" then exit repeat
        delay 1
    end repeat
    delay 1
end tell

Actualmente estoy usando este script para hacer clic en el botón de inicio de sesión y comprobar si la URL es correcta:

tell application "Safari"
    set theURL to URL of front document



    tell front document
        do JavaScript "document.getElementById('btnLogin').click()"
    end tell

    set theURL to URL of front document
    if (theURL = "https://csbsju.instructure.com/dashboard-sidebar") then
        tell application "Safari" to set the URL of the front document to "https://csbsju.instructure.com"
    end if
end tell

¿Alguna sugerencia sobre cómo hacer que esto funcione mejor? Es decir, la comprobación de si la página está cargada parte?

    
pregunta Andrew Breyen 22.03.2018 - 07:50

1 respuesta

1

Hay algunos métodos que puedes usar para verificar si la página ha terminado de cargarse. Aquí hay una selección con la que he tenido buenos resultados durante las pruebas:

Nombre del documento

Supervise la existencia del Safari document que tiene el mismo nombre que el título de la página web, que (creo) solo se asigna después de que la página haya terminado de cargarse, hasta la cual punto que conserva el nombre que tenía anteriormente, o "Sin título" si es un documento creado recientemente:

    tell application "Safari"
        make new document with properties {URL:"https://csbsju.instructure.com"}

        repeat until the document named ("Central Authentication Service " & ¬
            "| College of Saint Benedict & Saint John's University") exists
        end repeat

        log "Finished loading"
    end tell

El botón Iniciar sesión

Supervise la existencia del botón "Iniciar sesión" , dado que no puede hacer lo que debe hacer hasta que se haya creado ese elemento HTML en particular:

    tell application "Safari"
        make new document with properties {URL:"https://csbsju.instructure.com"}

        tell front document to repeat until (do JavaScript ¬
            "document.getElementById('btnLogin').id") as text is not ""
        end repeat

        log "Finished loading"
    end tell

El botón Recargar de Safari >

Supervise propiedades particulares del botón Safari Recargar , que cambian según si una página está cargando o ha cargado :

    tell application "Safari" to ¬
        make new document with properties {URL:"https://csbsju.instructure.com"}

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

    using terms from application "System Events"
        repeat until the accessibility description ¬
            of the reload_button ¬
            contains "Reload this page"
        end repeat
    end using terms from

    log "Finished loading"

Contenido de la página

Supervise si un texto específico aparece en el contenido de la página. En este caso, he elegido supervisar todo esto, pero en su lugar puede elegir elementos más pequeños. Los elementos que aparecen hacia el final de la página son los más adecuados:

    tell application "Safari"
        make new document with properties {URL:"https://csbsju.instructure.com"}

        ignoring white space
            tell front document to repeat until its text contains ¬
                "Central Authentication Service Network Username: " & ¬
                "Password: Warn me before logging me into other sites. " & ¬
                "Copyright © 2017 - All Rights Reserved College of Saint " & ¬
                "Benedict and Saint John's University"
            end repeat
        end ignoring

        log "Finished loading"
    end tell

Nombre de usuario & Contraseña campos

Como estos campos se completan automáticamente con el administrador de contraseñas de Safari , que solo ocurre cuando la página se ha cargado completamente, puede monitorear el contenido de texto del Nombre de usuario y Contraseña :

    tell application "Safari"
        make new document with properties {URL:"https://csbsju.instructure.com"}

        tell front document to repeat
            set a to (do JavaScript "document.getElementById('username').value") as text
            set b to (do JavaScript "document.getElementById('password').value") as text

            if length of (a & b) ≠ 0 then exit repeat
        end repeat

        log "Finished loading"
    end tell
    
respondido por el CJK 23.03.2018 - 05:35

Lea otras preguntas en las etiquetas