¿Cómo puedo encontrar el ID de ventana de Google Chrome para pasar a captura de pantalla -l [duplicado]

7

Me gustaría usar screencapture -l para hacer capturas de pantalla automatizadas de Google Chrome. Esto requiere conocer la ventana del proceso de Google Chrome que se está ejecutando.

Para aplicaciones compatibles con Applescript, Esta pregunta tiene la respuesta. Pero esa solución no funciona para aplicaciones que no son compatibles con scripts, como Google Chrome.

¿Hay alguna forma de recuperar el windowid de un proceso de Google Chrome en ejecución desde un script de Python? Sé que la aplicación Quartz Debug puede hacerlo, pero es una aplicación GUI, por lo que no puede invocarse mediante un script.

    
pregunta Lorin Hochstein 05.12.2012 - 21:52

2 respuestas

2

Resolví esto escribiendo un script en python. Cuando lo ejecute, puede especificar una aplicación para volcar la lista de ID de Windows, o si no especifica ninguna aplicación, se volcarán todas las ventanas.

Las ventanas se descargan ordenadas, por lo que lo que esté en la parte superior de la lista es la ventana "más alta" (aparentemente la que está activa actualmente si está visible)

Salida de ejemplo

bloop:~ r$ ./wlist2 Chrom
9040 0 "Chromium" "terminal - How do I find the windowid of Google Chrome to pass to screencapture -l - Ask Different"
9039 0 "Chromium" ""

Cómo usar esto para capturar una pantalla automáticamente desde un script de shell

screencapture -l $(./wlist2 Chrom | head -1 | awk '{print $1}') out.png

Script:

#!/usr/bin/python2.6

from itertools import chain
from Quartz import CGWindowListCreate as create_list
from Quartz import CGMainDisplayID as display_id
from Quartz import CGWindowListCreateDescriptionFromArray as lookup
import sys

class Windows(list):
    def find(self, name):
        for window in self:
            if window.IsOnscreen and window.OwnerName.find(name) > -1:
                print window

    def dump(self):
        for window in self:
            if window.IsOnscreen:
                print window


    def __getitem__(self, item):
        result = list.__getitem__(self, item)
        try:
            return Windows(result)
        except TypeError:
            return result

class Window(object):

    key_list = []

    def __init__(self, kwargs):
        for k in kwargs.keys():
            setattr(self, k.replace('kCGWindow',''), kwargs[k])
            self.key_list.append(k.replace('kCGWindow',''))

    def __repr__(self):
        t = '%d %d "%s" "%s"' % (
            getattr(self, 'Number', -1),
            getattr(self, 'Layer', -1),
            getattr(self, 'OwnerName', None),
            getattr(self, 'Name', None)
        )
        return t.encode('utf-8')

wlist=Windows()
for x in lookup(create_list(display_id(), 0)):
    wlist.insert(0, Window(dict(x)) )

if len(sys.argv) > 1:
    wlist.find(sys.argv[1])
else:
    wlist.dump()
    
respondido por el synthesizerpatel 22.05.2013 - 20:25
4

Puedes hacerlo con GrabFS , un sistema de archivos de captura de pantalla para OS X. (Descarga en la parte inferior de La página funciona bien para mí en 10.8.2 con OSXFUSE ) Le brinda las texturas de cualquier proceso de ventanas como archivos que puede copiar simplemente . Para actualizar la captura de pantalla, vuelva a copiar.

Se parece a esto (convertido de TIFF a PNG para ahorrar espacio): Es probable que necesites hacer un poco de shell scripting para automatizar esto, pero será fácil.

    
respondido por el MacLemon 06.12.2012 - 17:06

Lea otras preguntas en las etiquetas