print pantalla jscapture imprimir con captura javascript hta

jscapture - Tome una captura de pantalla de una página web con JavaScript?



screenshot javascript (11)

Descubrí que dom-to-image hizo un buen trabajo (mucho mejor que html2canvas). Consulte la siguiente pregunta y respuesta: https://stackoverflow.com/a/32776834/207981

Esta pregunta le pregunta si debe volver a enviarla al servidor, lo que debería ser posible, pero si desea descargar la (s) imagen (es) desea combinarla con FileSaver.js , y si desea descargar un archivo zip con múltiples archivos de imagen generados por el lado del cliente echan un vistazo a jszip .

¿Es posible tomar una captura de pantalla de una página web con JavaScript y luego enviarla de regreso al servidor?

No estoy tan preocupado con los problemas de seguridad del navegador. etc. ya que la implementación sería para HTA . ¿Pero es posible?



He hecho esto para una HTA usando un control ActiveX. Fue bastante fácil construir el control en VB6 para tomar la captura de pantalla. Tuve que usar la llamada a la API keybd_event porque SendKeys no puede hacer PrintScreen. Aquí está el código para eso:

Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Public Const CaptWindow = 2 Public Sub ScreenGrab() keybd_event &H12, 0, 0, 0 keybd_event &H2C, CaptWindow, 0, 0 keybd_event &H2C, CaptWindow, &H2, 0 keybd_event &H12, 0, &H2, 0 End Sub

Eso solo te lleva a conseguir la ventana para el portapapeles.

Otra opción, si la ventana que desea una captura de pantalla es una HTA sería simplemente usar una solicitud XMLHTTP para enviar los nodos DOM al servidor, luego crear las capturas de pantalla del lado del servidor.


Otra posible solución que he descubierto es http://www.phantomjs.org/ que permite tomar capturas de pantalla de páginas muy fácilmente y mucho más. Aunque mis requisitos originales para esta pregunta ya no son válidos (trabajo diferente), es probable que integre PhantomJS en proyectos futuros.



Puede lograr eso usando HTA y VBScript . Simplemente llame a una herramienta externa para hacer la captura de pantalla. Olvidé su nombre, pero en Windows Vista hay una herramienta para hacer capturas de pantalla. Ni siquiera necesita una instalación adicional para ello.

En cuanto a automático, depende totalmente de la herramienta que utilice. Si tiene una API, estoy seguro de que puede activar la captura de pantalla y el proceso de guardado a través de un par de llamadas de Visual Basic sin que el usuario sepa que usted hizo lo que hizo.

Como mencionaste HTA, asumo que estás en Windows y (probablemente) conoces muy bien tu entorno (por ejemplo, el sistema operativo y la versión).


Puede que esta no sea la solución ideal para ti, pero aún así vale la pena mencionarla.

Snapsie es un objeto ActiveX código abierto que permite capturar y guardar capturas de pantalla de Internet Explorer. Una vez que el archivo DLL está registrado en el cliente, debe poder capturar la captura de pantalla y cargar el archivo al servidor con JavaScript. Inconvenientes: necesita registrar el archivo DLL en el cliente y funciona solo con Internet Explorer.


Teníamos un requisito similar para reportar errores. Como era para un escenario de intranet, pudimos usar complementos de navegador (como Fireshot para Firefox e IE Screenshot para Internet Explorer).


Una forma posible de hacerlo, si se ejecuta en Windows y tiene .NET instalado, puede hacer lo siguiente:

public Bitmap GenerateScreenshot(string url) { // This method gets a screenshot of the webpage // rendered at its full size (height and width) return GenerateScreenshot(url, -1, -1); } public Bitmap GenerateScreenshot(string url, int width, int height) { // Load the webpage into a WebBrowser control WebBrowser wb = new WebBrowser(); wb.ScrollBarsEnabled = false; wb.ScriptErrorsSuppressed = true; wb.Navigate(url); while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } // Set the size of the WebBrowser control wb.Width = width; wb.Height = height; if (width == -1) { // Take Screenshot of the web pages full width wb.Width = wb.Document.Body.ScrollRectangle.Width; } if (height == -1) { // Take Screenshot of the web pages full height wb.Height = wb.Document.Body.ScrollRectangle.Height; } // Get a Bitmap representation of the webpage as it''s rendered in the WebBrowser control Bitmap bitmap = new Bitmap(wb.Width, wb.Height); wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height)); wb.Dispose(); return bitmap; }

Y luego a través de PHP puedes hacer:

exec("CreateScreenShot.exe -url http://.... -save C:/shots domain_page.png");

Luego tienes la captura de pantalla en el lado del servidor.


Una gran solución para captura de pantalla en Javascript es la de https://grabz.it .

Tienen una API de captura de pantalla flexible y fácil de usar que puede ser utilizada por cualquier tipo de aplicación JS.

Si quieres probarlo, al principio deberías obtener la clave de la aplicación de autorización + secreto y el SDK gratuito

Luego, en su aplicación, los pasos de implementación serían:

// include the grabzit.min.js library in the web page you want the capture to appear <script src="grabzit.min.js"></script> //use the key and the secret to login, capture the url <script> GrabzIt("KEY", "SECRET").ConvertURL("http://www.google.com").Create(); </script>

La captura de pantalla se puede personalizar con diferentes parameters . Por ejemplo:

GrabzIt("KEY", "SECRET").ConvertURL("http://www.google.com", {"width": 400, "height": 400, "format": "png", "delay", 10000}).Create(); </script>

Eso es todo. Luego, simplemente espere un momento y la imagen aparecerá automáticamente en la parte inferior de la página, sin necesidad de volver a cargar la página.

Existen otras funcionalidades para el mecanismo de captura de pantalla que puede explorar here .

También es posible guardar la captura de pantalla localmente. Para eso, necesitarás utilizar la API del lado del servidor GrabzIt. Para obtener más información, consulte la guía detallada here .