Guida di AppleScript: attendere il caricamento della pagina di Safari

1

Sto provando a creare uno script per aprire l'URL csbsju.instructure.com in Safari, attendere che la pagina si carichi completamente, fare clic sul pulsante di accesso e quindi ricontrollare se l'URL è corretto (c'è un bug che aggiunge dashboard-sidebar, quindi sto solo controllando l'URL e se è errato, reindirizzando la pagina. La digitazione delle credenziali è gestita dalla cosa di iCloud Password di Safari, quindi non devo preoccuparmene. Il grosso problema che sto avendo è la parte in attesa che la pagina venga caricata. Mi sono guardato intorno e al momento sto tentando di utilizzare questo codice, sebbene non funzioni:

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

Attualmente sto usando questo script per fare clic sul pulsante di accesso e verificare se l'URL è corretto:

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

Qualche suggerimento su come migliorare questo lavoro? Vale a dire il controllo se parte della pagina è caricata?

    
posta Andrew Breyen 22.03.2018 - 07:50
fonte

1 risposta

1

Esistono alcuni metodi che è possibile utilizzare per verificare se la pagina ha completato il caricamento. Ecco una selezione con cui ho ottenuto buoni risultati durante i test:

Nome documento

Monitora l'esistenza del Safari document che ha lo stesso nome del titolo della pagina web, che (credo) viene assegnato solo dopo il caricamento della pagina, fino a che punta mantiene il nome che aveva in precedenza, o "Senza titolo" se si tratta di un documento appena creato:

    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

Il pulsante Login

Controlla l'esistenza del pulsante "Accedi" , dato che non puoi fare ciò che devi fare fino a quando quel particolare elemento HTML non è stato creato:

    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

Safari del pulsante Ricarica

Monitora particolari proprietà del pulsante Safari Ricarica , che cambia a seconda che una pagina sia in caricamento o che sia caricata :

    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"

Contenuto della pagina

Monitorare la visualizzazione di un testo specifico all'interno del contenuto della pagina. In questo caso, ho scelto di monitorare tutto, ma puoi scegliere invece elementi più piccoli. Gli elementi che appaiono verso la fine della pagina sono i più adatti:

    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

Nome utente & Campi Password

Poiché questi campi vengono compilati automaticamente dal gestore della password di Safari , che si verifica solo quando la pagina è completamente caricata, è possibile monitorare il contenuto del testo del nome utente e campi :

    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
    
risposta data 23.03.2018 - 05:35
fonte

Leggi altre domande sui tag