3 votes

AppleScript : Attendre le chargement complet d'une page Safari

J'utilise ce script pour Google Chrome afin de mettre en pause le script jusqu'à ce que la page soit entièrement chargée :

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 

Cela ne semble pas fonctionner avec Safari, un équivalent ?

14voto

OnePablo Points 1

1. AppleScript source propriété

Vous pouvez essayer d'utiliser Safari 's source la propriété, qui est "" jusqu'à ce que le code HTML y soit chargé (ce qui ne peut être fait qu'une fois la page chargée). Notez, cependant, que cela n'implique pas nécessairement que la page a été rendu :

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

El source est réinitialisée à "" même entre les chargements/rechargements de pages.

2. Élément d'interface utilisateur du bouton de rechargement

Si vous voulez savoir qu'une page est chargée et rendu à l'écran, une méthode fiable consiste à déterminer si le bouton dans la barre d'URL est un bouton "reload" (page chargée et rendue), ou un bouton "cancel" (page toujours en cours de chargement/rendu) :

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 propriété

Si vous avez Autoriser JavaScript à partir des événements Apple coché dans le Développer vous pouvez alors accéder au menu readyState de l 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 propriété JavaScript renvoie l'une des cinq valeurs suivantes :

  • uninitialized : N'a pas encore commencé à charger
  • loading : Est-ce que le chargement
  • loaded : A été chargé
  • interactive : Il est suffisamment chargé et l'utilisateur peut interagir avec lui.
  • complete : Entièrement chargé

0voto

Dans la réponse acceptée "2. élément UI du bouton de rechargement" n'a pas fonctionné pour moi, mais voici ce qui a fonctionné :

-- 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:

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X