Cerrar ventanas recientes de una aplicación

Estoy usando Selenium para controlar varias sesiones de Firefox al mismo tiempo.

En este contexto, el sistema operativo maneja cada ventana de Firefox como una aplicación diferente.

Quiero crear un flujo de trabajo que me permita cerrar todas las ventanas recientes de Firefox (dejando funcionando la "más antigua"), pero no pude encontrar ninguna forma de ordenarlas por su fecha de apertura.

¡Cualquier ayuda sería apreciada!

Respuestas (3)

Intente acceder al menú de la ventana de Firefox, la ventana más antigua en la parte superior de la lista

Esto parece más un comentario que una respuesta. Si es una respuesta, ¿puede ampliar cómo resuelve esto la pregunta del OP?
Como mencioné, debido a que abro las ventanas de Firefox a través de Selenium, cada una de ellas se muestra como una aplicación separada

No tengo experiencia con Selenium , pero me pregunto si podría usar un AppleScript (que Alfred puede usar felizmente) para obtener las identificaciones de ventana de cada ventana de Firefox . Los ID de ventana normalmente se asignan de forma incremental, por lo que una ventana reciente tendrá un ID de mayor valor numérico que las anteriores.

    tell application "Firefox" to get every window

debe devolver una lista de todas las ventanas a las que se hace referencia por sus números de identificación, por ejemplo

    {window id 59 of application "Firefox", window id 2408 of application "Firefox", window id 61 of application "Firefox", window id 60 of application "Firefox"}

Por supuesto, me pregunto cómo afectará esto ejecutar varias instancias separadas de Firefox , ya que no puedo predecir si AppleScript enviará el get windowscomando a todas las instancias de Firefox o solo a una (y, de ser así, ¿a cuál?).

Si esa línea funciona como quiero, puede elegir la que tiene la identificación más pequeña y cerrar las demás. Aquí hay una forma de hacerlo:

    tell application "Firefox" to get the id of every window

    set W to result

    set AppleScript's text item delimiters to space
    do shell script ({"echo", W, "| tr ' ' '\\n'", "| sort -n"} as string)
        --> Outputs lines sorted from smallest to greatest value

    set W to first paragraph of result

    tell application "Firefox" to close (windows whose id > W)
+1 por el esfuerzo que pones en esto, aunque solo imprime 1 ID de ventana de Firefox, que es la principal
Temía que ese pudiera ser un posible resultado, dado lo que dijiste sobre Selenium creando múltiples instancias. Lo lamento. Gracias por +1, sin embargo.

Con la ayuda de esta respuesta, pude imprimir los ID y los nombres de todos los procesos que se ejecutan actualmente.

Luego realicé algunas pruebas y estas son mis ideas:

  1. Los procesos están ordenados por los más recientes.
  2. Los procesos de Firefox que abre Selenium se denominan "firefox-bin", a diferencia de los procesos habituales de "firefox".
  3. Por lo tanto, el orden de las ID coincide con el orden de los nombres, por lo que permite cruzar entre las listas e identificar las ventanas que Selenium ha abierto.

El código que usé es:

tell application "System Events" to get the name of every process whose background only is false
set _name to result
tell application "System Events" to get the id of every process whose background only is false
set _id to result

set AppleScript's text item delimiters to space
do shell script ({"echo", _name & " " & _id, "| tr ' ' '\\n'", "| sort -n"} as string)`

No es óptimo, pero solo necesitaba obtener las identificaciones correctas, por lo que esta prueba fue suficiente para seguir adelante.

¡Buen trabajo! Ese es un buen trabajo de detective.