AppleScript: Attendi il caricamento completo della pagina di Safari

3

Sto utilizzando questo script per Google Chrome per mettere in pausa lo script finché la pagina non è completamente caricata:

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 

Questo non sembra funzionare con Safari, qualsiasi equivalente?

    
posta Kevin 24.11.2018 - 16:18
fonte

2 risposte

4

1. AppleScript source proprietà

Potresti provare a utilizzare la proprietà di Safari source , che è "" finché il codice HTML non viene caricato in esso (operazione che può essere eseguita solo dopo aver caricato la pagina). Nota, tuttavia, che questo non implica necessariamente che la pagina sia stata resa :

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

La proprietà source viene reimpostata su "" anche tra caricamenti di pagina / ricariche.

2. Reload button UI element

Se vuoi sapere che una pagina è caricata e renderizzata sullo schermo, allora un metodo affidabile è determinare se il pulsante nella barra degli indirizzi è un pulsante "ricarica" (pagina caricata e renderizzata ), o un pulsante "Annulla" (pagina ancora in caricamento / rendering):

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 proprietà

Se hai Consenti JavaScript di Apple Events spuntato nel menu Sviluppa , puoi accedere alla proprietà readyState di 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 proprietà JavaScript document.readyState restituisce uno dei cinque valori:

  • uninitialized : non ha ancora iniziato a caricare
  • loading : sta caricando
  • loaded : è stato caricato
  • interactive : ha caricato abbastanza e l'utente può interagire con esso
  • complete : Completamente caricato
risposta data 24.11.2018 - 17:01
fonte
1

Se voglio davvero aspettare che la pagina sia completamente caricata, ecco un modo che ho trovato più affidabile di altri metodi che ho trovato per Safari :

Esempio AppleScript codice :

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:

Adattato per il mio uso dalla risposta di CJK a Guida di AppleScript: Attendi che la pagina di Safari carichi

Nota: il esempio codice AppleScript è proprio questo e non contiene alcuna gestione degli errori che potrebbe essere appropriata. L'onere dell'utente è di aggiungere qualsiasi gestione degli errori che possa essere appropriata, necessaria o desiderata. Dai un'occhiata a prova istruzione e errore istruzione nel Guida lingue AppleScript . Vedi anche Lavorare con errori .

    
risposta data 24.11.2018 - 16:59
fonte

Leggi altre domande sui tag