2 votos

¿Cómo es que Automator no puede encontrar imágenes en sitios como este:?

Quiero todos estos cerebros en una carpeta porque me gustaría verlos en una pila 3D.

He seguido los pasos indicados en la respuesta superior de este hilo:

¿Cómo descargar todas las imágenes de una página web a la vez?

Y, efectivamente, esta sencilla acción de tres pasos funciona como debería en la mayoría de los sitios en los que la he probado.

¿Qué está pasando aquí? Supongo que tiene que ver con el hecho de que son miniaturas contenidas en una especie de cuadrícula misteriosa. (Soy un novato, por si mi terminología no te ha puesto ya sobre aviso).

Me parece bien descargar las miniaturas. En realidad, prefiero las imágenes pequeñas, ya que tengo la intención de apilarlas todas en un volumen 3D. Mi ordenador no apreciaría las versiones de tamaño completo en esta aplicación.

Se agradece cualquier solución, pista o sugerencia. Tal vez una buena cosa fundamental para aprender sería lo que la "rejilla de imagen misteriosa impermeable" se llama realmente.

0 votos

Podrías

4voto

user3439894 Puntos 5883

Aquí hay dos ejemplos diferentes utilizando Safari de cómo descargar las imágenes individuales en miniatura de las exploraciones cerebrales en el objetivo URL .

El ejemplo AppleScript código que se muestra a continuación, se probó en Script Editor en MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .

  • 1 Asume los ajustes necesarios y apropiados en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

Método semiautomatizado

  1. Guarde el archivo ya abierto Safari página web que contiene el imágenes de los escáneres cerebrales como Archivo web .
  2. Ejecutar el ejemplo AppleScript código que se muestra justo debajo, en Script Editor .

Ejemplo AppleScript código :

property saveToFolder : POSIX path of ¬
    (path to downloads folder from user domain)

set thePropertyListFilePath to the POSIX path of ¬
    (choose file with prompt ¬
        "Select the saved Safari document " & ¬
        "of the brain scans..." default location ¬
        (path to desktop folder from user domain))

tell application "System Events"
    tell property list file thePropertyListFilePath

        set theWebSubresourcesCount to the ¬
            (count of property list items) of ¬
            property list item "WebSubresources"

        set n to 0
        repeat with i from 0 to theWebSubresourcesCount - 1

            set theWebResourceURL to the value of ¬
                property list item "WebResourceURL" of ¬
                property list item i of ¬
                property list item "WebSubresources"

            if theWebResourceURL contains "cgi-bin/imageservice" then

                set theWebResourceData to the value of ¬
                    property list item "WebResourceData" of ¬
                    property list item i of ¬
                    property list item "WebSubresources"

                if n is less than 10 then
                    set n to "00" & n
                    set imageName to "Image_" & n
                else if n is less than 100 then
                    set n to "0" & n
                    set imageName to "Image_" & n
                else
                    set imageName to "Image_" & n
                end if

                set theFile to saveToFolder & imageName & ".jpg"
                my writeToFile(theWebResourceData, theFile, true)
                set n to n + 1

            end if

        end repeat

    end tell
end tell

--  ## Handler ##

to writeToFile(theData, theFile, overwriteExistingContent)
    try
        set theFile to theFile as string
        if theFile contains "/" then
            set theOpenedFile to ¬
                open for access theFile with write permission
        else
            set theOpenedFile to ¬
                open for access file theFile with write permission
        end if
        if overwriteExistingContent is true then ¬
            set eof of theOpenedFile to 0
        write theData to theOpenedFile starting at eof
        close access theOpenedFile
        return true
    on error
        try
            close access file theFile
        end try
        return false
    end try
end writeToFile

Notas:

El ejemplo AppleScript código que se muestra directamente arriba, abrirá un choose file cuadro de diálogo para que elijas el justo guardado Safari página web que contiene el imágenes de los escáneres cerebrales.

A continuación, extraerá el objetivo imágenes de los escáneres cerebrales de los guardados Safari página web que contiene el imágenes de los escáneres cerebrales, escribiéndolos a la Descargas carpeta , denominados secuencialmente como Imagen_000.jpg a través de la número de imágenes de los escáneres cerebrales en los salvados Archivo web página web.

Este método es muy rápido en comparación con el Método totalmente automatizado que se muestra a continuación y sólo debería tardar unos 10 segundos después de seleccionar el objetivo archivo dependiendo de la velocidad de su CPU es.

Por desgracia, parece que el AppleScript save comando en Safari está roto y por qué el esto se publica como un método semiautomático. Si la página web de destino se guardara primero mediante programación, también podría ser un método totalmente automatizado.

La razón por la que hay dos métodos es que este fue una idea de última hora, sin embargo, debido a que es mucho más rápido que el método original que publiqué, lo he colocado primero y he mantenido el original ya que siempre es bueno tener más de una forma de realizar la tarea con el objetivo aplicación .


Método totalmente automatizado

(Respuesta original)

El ejemplo AppleScript código crea un nuevo ventana en Safari al objetivo URL espera a que la página termine de cargarse, y luego construye un lista de curl comandos para ser utilizado en un do shell script comando para descargar cada imagen, nombrándolas secuencialmente en el Descargas carpeta .

Tenga en cuenta que una vez que inicie el ejemplo AppleScript código debe esperar a que comience a descargar las imágenes antes de hacer cualquier otra cosa en Safari que sólo debería tardar unos segundos, dependiendo de la velocidad de su Internet conexión es.

Una vez que comienza la descarga, espera un tiempo aleatorio, entre 3 y 8 segundos, para descargar la siguiente imagen, ya que no quiere inundar el servidor con peticiones rápidas, ya que puede considerarlo un ataque.

Tal y como está codificado, debería tardar unos 20 minutos en descargar todas las imágenes.


Ejemplo AppleScript código :

property downloadsFolder : POSIX path of (path to downloads folder from user domain)

property theURL : "https://connectivity.brain-map.org/static/referencedata/experiment/thumbnails/100142290?image_type=NEUN&popup=true"
property domainURL : "https://connectivity.brain-map.org"
property curlCMDs : {}

tell application "Safari"
    make new document with properties {URL:theURL}
    my waitForSafariPageToFinishLoading()
    delay 3 --  # In this case, an extra delay is needed even after page finishes loading.
    tell document 1
        set imageCount to ¬
            (do JavaScript ¬
                "document.getElementsByClassName('_ish_tnw_cell _ish_tnw_dark').length;") ¬
                as integer
        repeat with i from 0 to imageCount - 1
            set foo to ¬
                do JavaScript ¬
                    "document.getElementsByClassName('_ish_tnw_cell _ish_tnw_dark')['" & i & "'].innerHTML;"
            my buildOutCURLcommands(foo, i)
        end repeat
    end tell
end tell

--  # Download the images of brain scans.

repeat with thisCMD in curlCMDs
    do shell script thisCMD
    delay (random number from 3 to 8)
end repeat

--  ## Handlers ##

to buildOutCURLcommands(foo, i)
    tell current application
        set AppleScript's text item delimiters to "\""
        set imageURL to text item 6 of foo
        set AppleScript's text item delimiters to "&amp;"
        set imageURL to text items of imageURL
        set AppleScript's text item delimiters to "&"
        set imageURL to imageURL as string
        set AppleScript's text item delimiters to ""
        set curlURL to quoted form of (domainURL & imageURL)
        if n is less than 10 then
            set i to "00" & i
            set imageName to "Image_" & i
        else if n is less than 100 then
            set i to "0" & i
            set imageName to "Image_" & i
        else
            set imageName to "Image_" & i
        end if
        copy ¬
            "curl " & curlURL & " -o " & downloadsFolder & imageName & ".jpg" to ¬
            the end of curlCMDs
    end tell
end buildOutCURLcommands

to waitForSafariPageToFinishLoading()
    --  # Wait for page to finish loading in Safari.
    --  # This works in **macOS Catalina** and 
    --  # macOS Big Sur and may need adjusting for
    --  # other versions of macOS.
    tell application "System Events" to repeat until ¬
        exists (buttons of groups of toolbar 1 of window 1 of ¬
            process "Safari" whose name = "Reload this page")
        delay 0.5
    end repeat
end waitForSafariPageToFinishLoading

Notas:

Mirando como el código fuente del objetivo URL las imágenes están dispuestas en un tabla y como tal facilita la comprobación de las imágenes URL que se muestra como el valor de src= en el HTML código de la células de la tabla .

Este script utilice AppleScript's text item delimiters para analizar el HTML texto devuelto por el segundo do JavaScript ... comando y, aunque en general el análisis sintáctico HTML debe ser realizado por aplicaciones/utilidades específicamente diseñado para hacerlo, sin embargo, en este caso de uso particular funciona como se pretende y por lo tanto se utiliza para llevar a cabo la tarea en cuestión.

El segundo do JavaScript ... comando vuelve, por ejemplo:

"<img class=\"_ish_tnw_img\" id=\"_img_0_0\" src=\"/cgi-bin/imageservice?zoom=4&amp;path=/external/connectivity/prod17/0500179232/0500179232.aff&amp;top=61168&amp;left=2176&amp;width=228&amp;height=181\" title=\"Position: 248\" _ish_tnw_index=\"0\" style=\"width: 153px;\">"

El buildOutCURLcommands(foo, i) manipulador utiliza AppleScript's text item delimiters para analizar el valor de foo y hace lo siguiente:

  • Obtenga la parte del URL que apunta al objetivo archivo de imagen de la valor de foo .
    • Lo analiza en base a la " en el cadena de HTML texto conseguir la sexta artículo en el lista Por ejemplo: /cgi-bin/imageservice?zoom=4&amp;path=/external/connectivity/prod17/0500179232/0500179232.aff&amp;top=61168&amp;left=2176&amp;width=228&amp;height=181
    • Sustituye a &amp; con & por lo que el URL está bien formado.
  • Acolcha el valor de i con ceros a la izquierda para que tenga tres dígitos para el nombre utilizado para la descarga archivo de imagen .
  • Construye el curl comando mientras se añade al curlCMDs lista que será ejecutado por un do shell script comando .

Después de esta parte de la script ha terminado la descarga comienza y entonces puede hacer lo que quiera con Safari , sólo deja que script Editor seguir ejecutando el script hasta que termine.


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>intente </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso del <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

0 votos

E

0 votos

@wch1zpink, Apreciat código realmente no era muc Safari antes así que al

2voto

siva Puntos 23

La página web no contiene las imágenes directamente, sino un JavaScript que el navegador ejecuta. Este código hace un API solicitud de una nueva página, que contiene enlaces a imágenes. El código de la primera página web lee entonces los enlaces a las imágenes de la segunda página y envía al navegador las marcas que contienen estas imágenes.

Automator descarga la primera página y busca en ella imágenes, sin encontrar ninguna. No ejecuta JavaScript ni hace peticiones adicionales como el navegador. Por esta razón, no puede utilizar la función "Guardar imágenes del contenido web" de Automator con esta página web.

Si quiere descargar contenidos de este sitio web de forma programada, utilice su API. Utilice la inspector web para inspeccionar las peticiones que hace la página web, y luego hacer la petición usted mismo y analizar la salida (por ejemplo jq para analizar el JSON de la API de su sitio web vinculado), descargando las URLs encontradas (con Automator u otro lenguaje de scripting).

1voto

wch1zpink Puntos 11

Si no estás "casado" con el uso de Safari La siguiente solución alternativa utilizando Google Chrome puede ser de su interés.

Lo siguiente AppleScript tal cual, creará una nueva carpeta llamada " Archivos_de_imágenes_del_mapa_cerebral " que contiene todas las imágenes en miniatura, en su escritorio.

Dependiendo de la velocidad de tu conexión a Internet y de tu ordenador, este proceso debería durar menos de 12 segundos para completar

property savedImages : (path to desktop as text) & "Brainmap Images.html"
property savedImagesFolder : (path to desktop as text) & "Brainmap Images_files"
property theURL : "https://connectivity.brain-map.org/static/referencedata/experiment/thumbnails/100142290?image_type=NEUN&popup=true"

tell application "Google Chrome"
    activate
    try
        tell window 1 to set URL of (make new tab) to theURL
    on error errMsg number errNum
        set newWindow to make new window
        tell newWindow to set URL of active tab to theURL
    end try
    tell window 1
        repeat while active tab is loading
            delay 0.1
        end repeat
    end tell
    delay 1
    save window 1's active tab in file savedImages
end tell

tell application "System Events"
    repeat until folder savedImagesFolder exists
        delay 0.1
    end repeat
    delay 1
end tell

do shell script "find " & quoted form of POSIX path of savedImagesFolder & ¬
    " -type f | grep -v 'imageser' | xargs -I {} rm {}"

do shell script "find " & quoted form of POSIX path of savedImagesFolder & ¬
    " -type f | xargs -I {} mv {} '{}.jpg' ; rm " & ¬
    quoted form of POSIX path of savedImages

0 votos

Nice a Safari +1, h tell application "Google Chrome" bloque Por ejemplo pasta.ee/p/W

0 votos

@user3439894 el tema con si ya hay un window 1 Estoy loco por eso LOL

0 votos

RE: " Siempre estoy así de chiflado LOL" -- Si, pero esto no es realmente para ti per se, es para el OP. A veces es mejor mantener la código menos complicado

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X