Répondre à la discussion

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*)