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!
Intente acceder al menú de la ventana de Firefox, la ventana más antigua en la parte superior de la lista
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 windows
comando 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)
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:
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.
Alano
GalAbra