No se puede borrar el historial en Safari usando AppleScript en OS X El Capitan

He estado usando el siguiente script para borrar el historial de Safari de la prueba de selenio en OS X Yosemite. Actualicé a OS X El Capitan y ahora el script no funciona.

Error devuelto: no se puede obtener el botón "Borrar historial"

tell application "Safari" to activate
tell application "System Events"
    tell process "Safari"
        tell menu bar 1
            tell menu bar item "History"
                tell menu 1
                    click menu item "Clear History…"
                end tell
            end tell
        end tell
        delay 1 -- optional
        click button "Clear History"
    end tell
end tell
¿Te funciona mi respuesta actualizada?

Respuestas (2)

En OS X El Capitan, al hacer clic en Borrar historial... en el menú Historial, hace que Borrar historial aparezca como un cuadro de diálogo modal o como una hoja enfocada en una ventana, como se ilustra en las imágenes al final de esta respuesta, y el código AppleScript a continuación lo maneja en cualquier escenario.

El código se escribe asumiendo que aparece como un cuadro de diálogo y si no se procesa como un cuadro de diálogo, el on error controlador lo procesa como una hoja.

Este código , directamente debajo, esencialmente replica lo que hizo su código en OS X Yosemite, aunque ajustado para su uso en OS X El Capitan, sin el delaycomando que puede agregar si lo desea.


tell application "Safari" to activate
tell application "System Events"    
    click menu item "Clear History…" of menu 1 of menu bar item "History" of menu bar 1 of process "Safari"    
    try        
        click button "Clear History" of front window of process "Safari"        
    on error
        try
            click button "Clear History" of sheet 1 of window 1 of process "Safari"            
        end try
    end try
end tell

Para interactuar con la lista en el botón emergente Borrar, para saber cuánto del Historial borrar, el siguiente ejemplo de código lo aborda.

Debido a que puede aparecer de dos maneras diferentes, desafortunadamente requiere dos conjuntos separados de código similar y ambas secciones de código que rodean la lista "Borrar ..." deben mantenerse manualmente y sincronizarse si/al usar ese segmento de código .

Nota: Hay 10 líneas de código comentadas, precedidas por --, pertenecientes a la lista "Borrar ...", 5 líneas en cada agrupación de código . Puede cambiar el valor actual para una de las 4 opciones descomentando las líneas de códigoclick pop up button 1 of window 1 of process "Safari" y , la de cada sección, y luego solo 1 de las otras 4 a la vez, la similar en cada sección. Esto significa que solo se deben descomentar 4 líneas en total, 2 en cada sección, 1 para hacer clic en el botón emergente y la otra para la cantidad del Historial que desea borrar. Los comentarios que agregué, precedidos por , dentro del código deberían explicarse por sí mismos.click pop up button 1 of sheet 1 of window 1 of process "Safari"-- #

tell application "Safari"
    activate
end tell

tell application "System Events"

    click menu item "Clear History…" of menu 1 of menu bar item "History" of menu bar 1 of process "Safari"

    try
        -- # 
        -- # NOTE: Keep this block of commented out code in sync with the similar block below!
        -- # 
        -- # If you want to change the value of the "Clear ..." list, then uncomment the line of code directly below this comment.
        -- # 
        -- click pop up button 1 of window 1 of process "Safari"
        -- #     
        -- # If you've uncommented the line of code directly above this comment, then uncomment only 1 of the 4 lines of code below.
        -- # 
        -- click menu item "the last hour" of menu 1 of pop up button 1 of window 1 of process "Safari"
        -- click menu item "today" of menu 1 of pop up button 1 of window 1 of process "Safari"
        -- click menu item "today and yesterday" of menu 1 of pop up button 1 of window 1 of process "Safari"
        -- click menu item "all history" of menu 1 of pop up button 1 of window 1 of process "Safari"
        -- # 

        click button "Clear History" of front window of process "Safari"

    on error
        try
            -- # 
            -- # NOTE: Keep this block of commented out code in sync with the similar block above!
            -- #     
            -- # If you want to change the value of the "Clear ..." list, then uncomment the line of code directly below this comment.
            -- # 
            -- click pop up button 1 of sheet 1 of window 1 of process "Safari"
            -- #     
            -- # If you've uncommented the line of code directly above this comment, then uncomment only 1 of the 4 lines of code below.
            -- # 
            -- click menu item "the last hour" of menu 1 of pop up button 1 of sheet 1 of window 1 of process "Safari"
            -- click menu item "today" of menu 1 of pop up button 1 of sheet 1 of window 1 of process "Safari"
            -- click menu item "today and yesterday" of menu 1 of pop up button 1 of sheet 1 of window 1 of process "Safari"
            -- click menu item "all history" of menu 1 of pop up button 1 of sheet 1 of window 1 of process "Safari"
            -- # 

            click button "Clear History" of sheet 1 of window 1 of process "Safari"

        end try
    end try
end tell

Esto, tal como está codificado, se ejecuta muy rápido, sin embargo, puede insertar algunos delay comandos , cuando corresponda, si desea ver mejor lo que sucede a medida que se borra el Historial.


En las imágenes a continuación, una con la flecha roja señala de qué se tratan las 10 líneas de código comentadas, precedidas por --, pertenecientes a la lista "Borrar ...". Para cambiar, por ejemplo, "la última hora" a uno de los otros valores , aquí es donde debe descomentar las líneas de código comentadas correspondientes .

Como una hoja: ingrese la descripción de la imagen aquí

Como cuadro de diálogo:

ingrese la descripción de la imagen aquí

@ user3290656, asumiré que entendió el código que se comentó y cómo usarlo, si es necesario/deseable. Si no, solo pregunte.
Entendí el código. Seguro. Mi escenario era borrar todo el historial. Fue sencillo. Tu código funciona perfectamente. Además, me enfrento a un problema más. En algún momento aparece la hoja de historial. ¿Cómo manejo ese escenario?
@ user3290656, actualicé, en realidad reescribí, mi respuesta a su pregunta. Ahora maneja Borrar historial que aparece como un cuadro de diálogo modal o como una hoja enfocada.
Hola: gracias por este script. Sin embargo, recibo un error que dice que el "elemento de la barra de menú "Historial" de la barra de menú 1 del proceso "Safari"" no se puede leer (-1728). ¿Cuál es la fuente de esto? ¡Gracias por ayudar!

Impresionante, impresionante y aún más impresionante...

Su respuesta parece aclarar la mayoría de las cosas y aprecio mucho sus esfuerzos.

Gracias por su tiempo y esfuerzos buen señor.

Ahora desearía haber buscado una respuesta mucho antes.


Entonces, lo que terminé hasta ahora que parece estar funcionando es lo siguiente.

El script "Safari On" se ve así en este momento pero funciona así:

  • Activa Safari...

  • cierra las ventanas abiertas..

  • selecciona la opción "Borrar historial"...

  • selecciona la opción "Borrar TODO el historial"...

  • en realidad borra todo el historial y ... (la mayoría) de los datos ...

  • luego se repite para borrar el historial/datos dos veces en total

  • luego te deja con una ventana nueva y limpia para navegar.

==== "Safari en":

tell application "System Events"
tell application "Safari"
    activate
    close every window
end tell
tell application "System Events"
    click menu item "Clear History…" of menu 1 of menu bar item "History" of menu bar 1 of process "Safari"
    try
        click pop up button 1 of window 1 of process "Safari"
        click menu item "all history" of menu 1 of pop up button 1 of window 1 of process "Safari"
        click button "Clear History" of front window of process "Safari"
        end try
end tell
tell application "Safari"
    make new document
end tell
end tell

Y el script "Safari Off" es básicamente el mismo excepto que cierra todas las ventanas y cierra el programa:

======

"Safari fuera":

tell application "Safari"
activate
close every window
end tell
tell application "System Events"
click menu item "Clear History…" of menu 1 of menu bar item "History" of menu bar 1 of process "Safari"
try
    click pop up button 1 of window 1 of process "Safari"
    click menu item "all history" of menu 1 of pop up button 1 of window 1 of process "Safari"
    click button "Clear History" of front window of process "Safari"
end try
end tell
tell application "Safari"
quit
end tell

====

Bien... ahora que los scripts borran el historial y los datos...

Los guardé en la carpeta de aplicaciones como... una aplicación ...

Luego configuré un Servicio separado para cada uno de los dos scripts que simplemente inicia ese script con una tecla de comando.

Usé Automator para crear los Servicios y luego los Servicios del sistema/teclado/accesos directos... para asignar una tecla de comando para cada script.

esto resulta ser realmente rápido y conveniente para borrar el historial y los datos de Safari.

¿Quién sabe?... ¿quizás sea posible hacer que estos scripts se ejecuten automáticamente al abrir o cerrar Safari?

Si alguien puede mejorar esto, siéntase libre. Me encantaría ver un script más eficiente, más limpio y más rápido hecho por alguien que sabe lo que está haciendo.

Además... cualquier otro script útil para optimizar los procesos de la aplicación. Hice uno para la aplicación "Clean My Mac" que abre Clean my Mac, ejecuta un escaneo... luego ejecuta el proceso de limpieza y sale de la aplicación... todo desde una tecla de comando.

gracias de nuevo por su tiempo y esfuerzos para resolver este problema... eres genial.