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

cwibal

Nouveau membre
27 Décembre 2020
2
0
68
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*)