# AppleScript Safari attendre le chargement complet de la page et de ses images



## cwibal (27 Décembre 2020)

Bonjour à tous,
Le script ci-dessous me permet de récupérer sur un site des portions d'images contenant des informations utiles à mes recherches généalogiques.
Il fonctionne bien mais le problème est que le réseau chez nous est capricieux, que les images se chargent plus ou moins rapidement et que je me retrouve soit avec de belles vue du fond de page soit avec des images manquantes.
J'aimerais donc remplacer le délai de 10 s par un script Java ou autre qui ne capturerait l'image que lorsque celle-ci serait complètement affichée et me ferait gagner du temps par la même occasion quand le réseau est au plus fort.
J'ai bien trouvé quelques pistes listées au bas du script mais mes compétences en la matière étant assez limitées les tentatives faites se sont révélées totalement infructueuses.
Je m'en remets donc aux experts qui auront la gentillesse de se pencher sur la chose suivante :

tell application "Safari" --Chargement de la page de départ pour cet exemple
    open location "https://www.memoiredeshommes.sga.defense.gouv.fr/fr/ark:/40699/e005e466c1421f38/5e466c1457a94"
end tell
set DefaultPath to "/Users/Nom_Utilisateur/Desktop/"
set TimeStamp to do shell script "date +%Y%m%d_%H%M%S_"
set vues to 1
repeat until vues = 3 + 1 -- il peut y avoir des centaines d'images
    tell application "System Events"
        set frontApp to first application process whose frontmost is true
        set FWindow to first window of frontApp
        set FName to DefaultPath & TimeStamp & vues & ".jpg"
        set {x, y} to position of FWindow
        set {w, h} to size of FWindow
        do shell script "screencapture -R " & 100 & "," & 230 & "," & 1000 & "," & 370 & " " & quoted form of FName
    end tell
    tell document 1 of application "Safari"
        activate
        do JavaScript "document.getElementById('arkoVision_next').click();"
    end tell
    set vues to vues + 1
    delay 10 -- à remplacer
end repeat


(_1/ do JavaScript "window.addEventListener()"_)

(_2/ utiliser window.onload en javascript_)

(_3/ do JavaScript "document.readyState" in document 1_)

(*4/ tell application "Safari"
      activate
      repeat until SafariWindowHasLoaded(1) of me is true
      end repeat
      beep
end tell

on SafariWindowHasLoaded(inWindowIndex)
      tell application "System Events" to ¬
          tell application process "Safari"    
              set theStatusText to name of static text 1 of group 2 of window inWindowIndex as text
              if theStatusText begins with "Contacting" or ¬
                  theStatusText begins with "Loading" or ¬
                  theStatusText begins with "Waiting" then
                  set theReturnValue to false
              else
                  set theReturnValue to true
              end if
          end tell
      return theReturnValue
end SafariWindowHasLoaded*)


----------

