AppleScript en OS X 10.10 para cambiar el tamaño de la ventana de Safari y tomar una captura de pantalla de esa ventana y repetir con varios tamaños

Me gustaría crear una aplicación AppleScript que, cuando se ejecute, haga lo siguiente:

  1. Abre Safari y navega a una URL específica, un archivo delimitado por líneas o CSV. Esto no es obligatorio, pero haría que la generación de múltiples capturas de pantalla de diferentes páginas sea mucho más rápida.

  2. Cambiar el tamaño de la ventana de Safari a uno de varios tamaños

  3. Tome una captura de pantalla de la ventana de Safari con el nombre de archivo como URL junto con el tamaño de la pantalla

Respuestas (2)

Solo obtuve una solución parcial , que funciona aparte de algunos pequeños problemas.

En primer lugar, no puede almacenar la URL en el nombre del archivo (debido a las barras oblicuas y los caracteres especiales), por lo que deberá especificar el nombre del sitio web.

Pero lo que es más importante, hasta ahora la importación de CSV no está implementada. ¿CSV es realmente un requisito difícil o podría obtener la lista de URL en un formato diferente? De lo contrario, actualice su pregunta con líneas ejemplares de su archivo CSV. Trabajaré en ello y actualizaré mi respuesta lo antes posible.

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
eso es perfecto gracias. Solo una cosa menor, las capturas de pantalla se toman demasiado rápido antes de que se cargue la página. He aumentado la demora. Además, ¿hay alguna manera de decirle a Safari que lo imite para que piense que es un iPhone o iPad?
Sí, la parte del retraso es complicada. Intenté residir en el estado de preparación de JavaScript, pero esto muchas veces finaliza antes de que el navegador muestre la página por completo. Para cambiar el User-Agent, puede probar el AppleScript publicado aquí (Nota: no lo probé):

Es mejor comprobar si la página ha terminado de cargarse antes de hacer una captura de pantalla. Tomando el código de respuesta parcial original de Asmus algo así como...

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

...se hará cargo de ello.