1 votes

AppleScript dans OS X 10.10 pour redimensionner la fenêtre Safari et faire une capture d'écran de cette fenêtre, puis répéter l'opération avec plusieurs tailles.

Je voudrais créer une application AppleScript qui, lorsqu'elle est exécutée, fait ce qui suit :

  1. Ouvrez Safari et naviguez vers une URL spécifique, ou un fichier délimité par des lignes, ou CSV. Ce n'est pas obligatoire mais cela rendrait la génération de plusieurs captures d'écran de différentes pages beaucoup plus rapide.

  2. Redimensionner la fenêtre de Safari à l'une des nombreuses tailles disponibles.

  3. Faites une capture d'écran de la fenêtre Safari, le nom du fichier étant l'url et la taille de l'écran.

2voto

Asmus Points 7195

Je n'ai eu qu'un partiel qui fonctionne à l'exception de quelques petits problèmes.

Tout d'abord, il n'est pas possible de stocker l'URL dans le nom du fichier (à cause des barres obliques et des caractères spéciaux) ; vous devez donc spécifier le nom du site Web.

Mais surtout, jusqu'à présent, l'importation CSV n'est pas implémentée. Le CSV est-il vraiment une exigence stricte, ou pourriez-vous obtenir la liste des URL dans un autre format ? Sinon, veuillez mettre à jour votre question avec des lignes exemplaires de votre fichier CSV. Je vais y travailler et mettre à jour ma réponse dès que possible.

on open_url(theUrl, theUrlName, x0, y0, xSize, ySize)
    tell application "Safari"
        open location theUrl
        activate

        set bounds of window 1 to {x0, y0, xSize, ySize}
        set windowID to id of window 1
        set the_state to missing value

        repeat until the_state is "complete"
            set the_state to (do JavaScript "document.readyState" in document 1)
            delay 0.3
        end repeat

        set theFolder to POSIX path of (path to desktop as string)
        set shellCommand to "/usr/sbin/screencapture -l " & windowID & " " & quoted form of (theFolder & "Screen Shot " & theUrlName & " " & xSize & "x" & ySize & ".png")
        do shell script shellCommand

    end tell
end open_url

set resolutionList to {{640, 480}, {1024, 768}}
set siteList to {{"http://www.apple.com", "Apple"}, {"http://www.google.com", "Google"}}

repeat with resolution in resolutionList
    set xSize to item 1 of resolution
    set ySize to item 2 of resolution
    repeat with theSite in siteList
        set theUrl to item 1 of theSite
        set theUrlName to item 2 of theSite
        open_url(theUrl, theUrlName, 0, 0, xSize, ySize)
    end repeat
end repeat

0 votes

C'est parfait, merci. Juste une petite chose, les captures d'écran sont prises trop rapidement avant que la page ne soit chargée. J'ai augmenté le délai. Par ailleurs, existe-t-il un moyen d'indiquer à Safari de l'imiter pour qu'il pense qu'il s'agit d'un iPhone ou d'un iPad ?

0 votes

Oui, la question du délai est délicate. J'ai essayé de résider dans l'état de préparation de JavaScript, mais c'est souvent terminé avant que le navigateur ne rende complètement la page. Pour modifier l'agent utilisateur, vous pouvez utiliser la commande AppleScript posté ici (Note : je ne l'ai pas testé) :

0voto

Yasir Arsanukaev Points 6547

Il est préférable de vérifier que le chargement de la page est terminé avant de faire une capture d'écran. En prenant le code de réponse partiel original d'Asmus, quelque chose du genre...

delay 10

tell application "Safari"
    do JavaScript "document.readyState == 'complete'" in window 1's current tab
end tell
set loaded to result
if loaded is true then
    set shellCommand to "/usr/sbin/screencapture -l " & windowID & " " & quoted form of (theFolder & "Screen Shot " & theUrlName & " " & xSize & "x" & ySize & ".png")
    do shell script shellCommand
end if

...s'en chargera.

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