Domanda:
Come trovo l'ID della finestra di Google Chrome da passare all'acquisizione dello schermo -l
Lorin Hochstein
2012-12-06 02:52:59 UTC
view on stackexchange narkive permalink

Vorrei utilizzare screencapture -l per acquisire schermate automatiche di Google Chrome. Ciò richiede la conoscenza dell'id della finestra del processo di Google Chrome in esecuzione.

Per le app che supportano Applescript, questa domanda ha la risposta. Ma quella soluzione non funziona per le app che non sono scriptabili, come Google Chrome.

Esiste un modo per recuperare il windowid da un processo di Google Chrome in esecuzione da uno script Python? So che l'app Quartz Debug può farlo, ma è un'app GUI, quindi non può essere richiamata tramite script.

Deve essere esplicitamente la finestra di Chrome o in realtà hai solo bisogno della pagina web che stai visitando per un'immagine? (Dato Webkit rendering.)
@MacLemon Deve essere specifico per Chrome, perché c'è un problema con Safari su quel particolare sito (Safari non consente l'autenticazione OpenID all'interno degli iframe). Ho trovato un modo per acquisire i contenuti del browser tramite selenio, vedere http://stackoverflow.com/questions/13732281. Mi piacerebbe comunque conoscere la risposta a questa domanda specifica.
Due risposte:
MacLemon
2012-12-06 22:06:50 UTC
view on stackexchange narkive permalink

Puoi farlo con GrabFS, uno screenshot del filesystem per OS X. (Scarica in fondo alla pagina. Funziona bene per me su 10.8.2 con OSXFUSE ) Ti fornisce le trame di qualsiasi finestra di processo come file che puoi semplicemente copiare. Per aggiornare lo screenshot, copia di nuovo.

Assomiglia a questo (convertito da TIFF a PNG per risparmiare spazio.): Google Chrome Screenshot of this page taken with GrabFS.]![Screenshot of Google Chrome displaying this thread taken with GrabFS. Probabilmente dovrai eseguire un po 'di script di shell per automatizzare questo, ma quello sarà facile.

Questa è un'app dall'aspetto elegante. Sembra che tu possa persino ottenere il windowid dai percorsi dei file, che risponde direttamente alla domanda sopra, anche se non hai bisogno del windowid se stai usando GrabFS.
L'unico aspetto negativo è che probabilmente vorrai convertire gli screenshot .tiff in qualcosa di più compatto come .png che è facile con la build in sips. `sips -s format png Path / To / Image.tiff --out Path / To / ConvertedImage.png` che in realtà si traduce in un singolo passaggio di copia / conversione.
Devo dire che quella barra di scorrimento è incredibilmente sgradevole ...
Come ha aggiunto il poster originale, ha bisogno esplicitamente di uno screenshot della finestra del browser Chrome e quello includerà una barra di scorrimento a volte. Se vuoi fare screenshot di pagine web complete senza alcun browser chrome (barre degli strumenti, barra degli indirizzi, barre di scorrimento, ecc.) Puoi usare Webkit2PNG. https://github.com/paulhammond/webkit2png
Era solo un commento :). Ma apprezzo il collegamento Webkit2PNG, poiché sto per utilizzarlo, proprio ora!
synthesizerpatel
2013-05-22 23:25:28 UTC
view on stackexchange narkive permalink

Ho risolto questo problema scrivendo uno script python. Quando lo esegui, puoi specificare un'applicazione per cui eseguire il dump dell'elenco di ID di Windows, o se non specifichi alcuna applicazione, scaricherà tutte le finestre.

Le finestre vengono scaricate in ordine di presentazione, quindi qualunque cosa si trovi in ​​cima alla lista è la finestra "più in alto" (apparentemente quella attualmente attiva se è visibile)

Esempio di output

  bloop: ~ r $ ./wlist2 Chrom9040 0 "Chromium" "terminal - Come trovo il windowid di Google Chrome da passare a screencapture -l - Ask Different" 9039 0 "Chromium" "" 

Come usarlo per catturare automaticamente una schermata da uno script di shell

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

Script:

  #! / usr / bin / python2.6 da ittools import chainfrom Quartz import CGWindowListCreate as create_listfrom Quartz import CGMainDisplayID come display_id da Quartz import CGWindowListCreateDescriptionFromArray come lookupimport sysclass Windows (list): def find (self, name): for window in self: if window.IsOnscreen and window.OwnerName.find (name) > -1: print window def dump (sel f): for window in self: if window.IsOnscreen: print window def __getitem __ (self, item): result = list .__ getitem __ (self, item) try: return Windows (result) eccetto TypeError: return resultclass 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. sostituire ('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]) altro: wlist.dump ()  


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...