Como recién llegado a AppleScript, es muy posible que me esté olvidando de algo obvio, pero agradecería que me dieran su opinión. Mi intención es utilizar Safari para cargar una serie de imágenes de un número de The New Yorker y guardarlas como una secuencia de archivos png.
Aquí está mi intento (perdón por el aspecto extraño de esto, pero tuve problemas con el copiar/pegar en el 'cuerpo' de este mensaje debido a los comentarios en mi código) :
set i to 1
repeat 10 times
(*
format pagenumber to 11 characters
format outfile to 7 characters *)
if i is less than 10 then
set pagenumber to "page000000" & i & ".jpg"
set outfile to "page00" & i & ".png"
else
if i is less than 100 then
set pagenumber to "page00000" & i & ".jpg"
set outfile to "page0" & i & ".png"
else
set pagenumber to "page0000" & i & ".jpg"
set outfile to "page" & i & ".png"
end if
end if
(* generate URL *)
set html to "https://archives.newyorker.com/rvimageserver/Conde%20Nast/New%20Yorker/1967_09_02/" & pagenumber
tell application "Safari"
if not (exists document 1) then reopen
(* load URL *)
tell current tab of window 1 to set URL to html
(* get the id of that window *)
set window_id to id of window 1
(* when web page has finally loaded, the resultant document will consist of the page number plus 2,048×2,797 pixels, or 2,048×2,881 pixels ie "page0000002.jpg 2,048×2,797 pixels" or "page0000010.jpg 2,048×2,881 pixels" *)
set thename to pagenumber & " 2,048×2,797 pixels"
set othename to pagenumber & " 2,048×2,881 pixels"
(* wait for page to load see https://apple.stackexchange.com/questions/319986/applescript-help-wait-for-safari-page-to-load *)
set myexit to "false"
repeat while myexit = "false"
if the document named (thename) exists then
set myexit to "true"
end if
if the document named (othename) exists then
set myexit to "true"
end if
end repeat
delay 2
end tell
(* caputure the image element of window and save to outfile *)
do shell script ("screencapture -R 518,111,640,877 -l " & window_id & " " & outfile)
delay 2
(* increment count *)
set i to i + 1
end repeat
Todo parece funcionar como se espera hasta que intento capturar la pantalla a un archivo de salida cuando me encuentro con dos problemas:
~ no se crean archivos de salida (el mismo comando en el terminal funciona)
~ La opción -R de "captura de pantalla" para seleccionar parte de la ventana no funciona
Gracias, por cualquier consejo.
0 votos
Si sólo quieres obtener copias de las imágenes, puedes considerar llamar a
curl
en lugar descreencapture
que puede descargar las imágenes y guardarlas para usted. Una llamada básica del Terminal la línea de comandos se vería así:cd ~/Pictures/NYTimesPhotos; curl --remote-name-all --url https://archives.newyorker.com/rvimageserver/Conde%20Nast/New%20Yorker/1967_09_02/page[00001-00010].jpg
que descargaría 10 imágenes jpeg. Sin embargo, tendrá que leer la página de manual (man curl
) para aprender a enviar credenciales concurl
para iniciar la sesión primero.0 votos
Gracias por su (rápida) respuesta. La razón por la que he decidido utilizar el método AppleScript/Safari es porque el archivo de The New Yorker requiere un nombre de usuario/contraseña para acceder a estas páginas; pero entrando en el sitio desde una sesión de Safari antes de llamar al script puedo mostrar las páginas con éxito en una nueva pestaña de Safari. (En realidad, mi plan original era utilizar un script de perl, pero me he encontrado con el mismo problema que curl con los archivos descargados resultantes contienen "403 - Prohibido: Acceso denegado").
0 votos
Puede enviar credenciales con
curl
para autorizar su acceso. Está en la página man.0 votos
¿Podría mostrarme cómo, por favor? El sitio del archivo parece utilizar JavaScript cuando se accede al sitio archivos.newyorker.com y haga clic en el botón LOG IN de la parte inferior de la pantalla.
0 votos
Lea esta respuesta .
0 votos
Gracias por la referencia. Desafortunadamente, para este sitio esto no parece funcionar. He intentado varias veces con un usuario válido solamente, y curl solicita la contraseña, y luego con usuario:contraseña, pero aunque se crea el archivo cookie, se envía una pantalla html a la terminal (si se intenta "curl --user myUser:Apassword --cookie-jar ./somefile archivos.newyorker.com "verás lo que quiero decir). ¿Esto se debe a que se utiliza JavaScript para el inicio de sesión? Sin embargo, esto me ha hecho preguntarme si cuando me conecto con Safari, se crea un archivo de cookies que podría utilizar en su lugar; si es así, ¿alguna idea de dónde se encuentra?
0 votos
Vamos a continuar esta discusión en el chat .