6

¿Es posible capturar una captura de pantalla de una ventana abierta usando el depurador remoto Chrome Development Tools?¿Captura una captura de pantalla de Chrome con las Herramientas para desarrolladores de Chrome?

Por ejemplo, estoy conectando al puerto de depuración remota y tengo este código que aparece una ventana vacía:

private void sendWindowPop(int width, int height) throws 
IOException { 
     hsc.send("{\"method\": \"Runtime.evaluate\", \"id\": " 
       + hsc.nextInt() 
       + ", \"params\": {" 
       + "\"expression\": 
\"window.open('about:blank','name','toolbar=0,scrollbars=0," 
       + "location=0,status=0,menubar=0,resizable=0,width=" 
       + width 
       + ",height=" 
       + height 
       + "');\"" 
       + "}}"); 

(HSC es mi conexión con el depurador en http://localhost:9222)

entonces, me carga mi URL de destino con esto:

private void loadPage(String uriString) throws IOException { 
     hsc.send("{\"method\": \"Page.open\", \"id\": " + 
     hsc.nextInt() + ", \"params\": {\"url\": \"" + uriString + "\"}}"); 
     hsc.waitFor(ChromeNotifications.PAGE_LOADEVENTFIRED, DEFAULT_TIMEOUT_MILLIS); 
    } 

el código anterior funciona bien, y primero aparece una ventana y luego carga el URL. Idealmente, lo siguiente que me gustaría hacer es tomar una captura de pantalla de la página web cargada. En este momento, estas ventanas del navegador pop en un escritorio virtual Xvfb, y puedo usar herramienta de importación de ImageMagick para agarrar una captura de pantalla de la ventana de destino, pero sólo si es en el primer plano .

Esto es un problema, ya que esta aplicación está diseñada para ejecutarse en en paralelo con varias ventanas que aparecen en el escritorio virtual. Cualquier ventana que se superponga a mi ventana de destino me dará una captura de pantalla negra , ya que Xfvb solo muestra lo que está visible.

También busqué en la referencia de API, chrome.tabs.captureVisibleTab. No hay suerte allí, no captura lo que no es visible.

¿Hay alguna manera, usando el depurador remoto, de capturar una captura de pantalla de una ventana abierta ?

(con fines de referencia, mi mando ImageMagick para la importación es este)

DISPLAY=:0.0 import -window "Google - Chromium" screenshot.png 

Cuando abro la URL http://www.google.com en mi navegador de cromo utilizando LoadPage() anterior. Funciona muy bien siempre que la ventana "Google - Chromium" que aparece no esté obstruida y tenga foco. Coloca otra ventana sobre una parte, y obtengo una gran área negra que no fue renderizada.

Gracias!

Respuesta

4

Chrome Protocolo de depuración remota ahora es compatible con la función Page.captureScreenshot

Este es un ejemplo en coffeescript

screenshot: (name, callback)=> 
    safeName = name.replace(/[^()^a-z0-9._-]/gi, '_') + ".png" 
    png_File = "./_screenshots".append_To_Process_Cwd_Path().folder_Create() 
           .path_Combine(safeName) 

    @chrome._chrome.Page.captureScreenshot (err, image)-> 
     require('fs').writeFile png_File, image.data, 'base64',(err)-> 
     callback() 

(fragmento de https://github.com/TeamMentor/TM_4_0_Design/blob/Issue_80_Jade_Cleanup/QA/API/QA-TM_4_0_Design.coffee#L54)

+0

El enlace está muerto :(¿Cómo accedes/creas el objeto 'Página'? – user2561747

+1

Hola, parece que esa rama ya no existe echar un vistazo a https://github.com/TeamMentor/TM_4_0_Design/blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/API/QA-TM_4_0_Design.coffee#L56 y https://github.com/TeamMentor/TM_4_0_Design /blob/94612a699aa03565bea6c045400bccd1cc68dd76/QA/tests/help-pages.coffee#L40 –

+0

¿Hay algo útil aquí para alguien que solo quiera pegar un comando en el panel de la consola o presionar una tecla de acceso directo? – Pysis

0
+0

Hola Adel, yo mirado a la pajarera y tiene algunas opciones interesantes y una API pública, pero la API está orientado a la edición de imágenes. No vi nada que me permita tomar una captura de pantalla de forma programática, por lo que mi búsqueda continúa. ¡Gracias! – AWT

+0

@torgis ¡Espero que hayas encontrado lo que estabas buscando! –

+1

Encontré algunas cosas interesantes, pero nada hizo exactamente lo que estaba buscando. En cambio, estoy en el proceso de escribir el mío. ¡Deséame suerte! :) – AWT

0

Si necesita el uso solución basada en Java para capturar cdp4jpágina completa pantalla.

public static void main(String[] args) throws IOException, InterruptedException { 
    SessionFactory factory = new Launcher().launch(); 

    Path file = createTempFile("screenshot", ".png"); 

    try (Session session = factory.create()) { 
     session.navigate("https://webfolder.io"); 
     session.waitDocumentReady(); 
     byte[] data = session.captureScreenshot(); 
     write(file, data); 
    } 

    if (isDesktopSupported()) { 
     getDesktop().open(file.toFile()); 
    } 

    factory.close(); 
} 

Screenshot.java

Cuestiones relacionadas