c# - notifica - telegram no me deja hacer captura de pantalla
Tomar una captura de pantalla de IE devuelve una imagen negra (8)
Abra el Administrador de control de servicios : puede ejecutar WindowsKey + R (ejecutar) y escribir services.msc y presionar <INTRO> y se iniciará.
Encuentre el servicio y haga clic con el botón derecho sobre él y elija propiedades en el menú contextual.
Permitir que el servicio interactúe con el escritorio
Ahora, seleccione la pestaña Iniciar sesión. Desea asegurarse de que la casilla de verificación esté seleccionada para "Permitir que el servicio interactúe con el escritorio".
Puedes verlo en la imagen de abajo.
Nota : No tengo ese servicio, así que elegí otro en la imagen de muestra.
Estoy construyendo una aplicación de consola que se conectará a diferentes computadoras en la red y tomará capturas de pantalla del navegador de una página web.
Usando Selenium 2.47.1 para configurar el servidor y los nodos. La aplicación de consola se ejecuta en la PC que está configurada como concentrador de selenio.
La captura de pantalla está bien en Firefox, Chrome, es decir, desde la computadora del concentrador.
La captura de pantalla también está bien en Firefox en la PC remota.
Pero con IE devuelve una imagen negra.
Tanto los equipos concentradores como los nodos se ejecutan en Windows 7 de 64 bits, tienen IE11. Estoy usando el IEDriver de 64 bits en ambas PC. La computadora del nodo no está bloqueada.
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
static void Main(string[] args)
{
IWebDriver NewDriver = null;
using (NewDriver = new RemoteWebDriver(new Uri("http://172.165.10.111/wd/hub"), DesiredCapabilities.InternetExplorer()))
{
if (NewDriver != null)
{
NewDriver.Navigate().GoToUrl("http://www.google.com");
NewDriver.Manage().Window.Size = new Size(1804, 1096);
Screenshot ss = ((ITakesScreenshot)NewDriver).GetScreenshot();
ICapabilities capabilities = ((RemoteWebDriver)NewDriver).Capabilities;
ss.SaveAsFile(@"C:/Path/123.png", ImageFormat.Png);
NewDriver.Quit();
}
}
}
Es porque su pantalla está bloqueada o se está ejecutando un protector de pantalla.
Deberá apagar el protector de pantalla y configurar las ventanas para que nunca se bloqueen cuando no estén en uso. Para apagar tu protector de pantalla:
- Haga clic en el botón de Inicio.
- Haga clic en el Panel de control.
- En el cuadro de búsqueda, escribe protector de pantalla.
- Haga clic en Activar o desactivar el protector de pantalla.
Luego modifica la configuración de tu protector de pantalla. Asegúrese de haber desmarcado "En reanudar, mostrar pantalla de inicio de sesión".
Mientras se encuentra en el panel de control, probablemente valga la pena verificar las opciones de energía y asegurarse de que la máquina no se vaya a dormir ni apagar luego de un período de tiempo determinado.
También querrá usar VNC o asistencia remota para acceder a la GUI. Si su RDP se bloquea, la pantalla quedará bloqueada para el usuario local que está actualmente conectado y nuevamente bloqueará la pantalla cuando se desconecte.
Finalmente, no use el controlador IE de 64 bits, debe usar el de 32 bits. Nadie ejecuta la versión de 64 bits de IE (incluso si tienen una máquina con capacidad para 64 bits).
****** Editar Agregando un poco más de información de una fuente creíble y confiable ******
Debajo hay un enlace a una publicación en el foro de usuarios de Selenium donde Jim Evans (el desarrollador que escribió los binarios de IEDriver) explica esto:
Esta cita en particular acerca de tomar capturas de pantalla cuando se desconectó de una instancia de RDP:
Es una limitación conocida. No hay una solución conocida. Quejarse a Microsoft Son los que hacen que la API PrintWindow (que es la API adecuada para usar al capturar capturas de pantalla) se comporte de esa manera. O eso, o si descubres una forma de hacerlo funcionar, puedes enviar un parche.
Explica cómo funciona el código de captura de pantalla con más detalle en su blog aquí:
http://jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html
Específicamente:
El controlador IE toma capturas de pantalla usando la función PrintWindow API. PrintWindow solo puede tomar una captura de pantalla de la parte visible de una ventana determinada, lo que significa que para obtener una captura de pantalla de página completa (como lo requiere la API de WebDriver), la ventana debe tener el tamaño suficiente para mostrar toda la página sin desplazamiento barras. Sin embargo, Windows no permite que la ventana tenga un tamaño mayor que la resolución de pantalla visible. Cuando le pedimos a IE que cambie el tamaño, se envía un mensaje WM_GETMINMAXINFO en un evento de cambio de tamaño para que el IE pueda calcular qué tan grande puede ser una ventana. Al interceptar ese mensaje con un gancho y modificar los valores máximos, podemos engañar al IE haciéndole creer que una ventana puede tener un tamaño mayor de lo que la resolución de pantalla permitiría.
He tenido una sospecha furtiva de que IE ha estado renderizando con DirectX durante un tiempo y este artículo ciertamente parece indicar que este es el caso ... lo que explicaría por qué tendrías problemas ya que las capturas de pantalla basadas en GDI no funcionarán Superficies de DirectX.
Estoy diciendo que esto es un absoluto ... solo una corazonada
Parece que esto podría ser un problema conocido con la configuración:
https://code.google.com/p/selenium/issues/detail?id=3536
De lo que @ShubhasmitGupta se mencionó anteriormente, parece que el controlador de IE entrega capturas de pantalla en pantalla negra cuando el escritorio está bloqueado (supongo que esto tiene algo que ver con que DWM / Explorer no muestra ventanas).
Hay una solución que implica no bloquear la computadora objetivo cuando se conecta a ella a través de RDP. Esencialmente, usted crea un archivo disconnect.bat con los siguientes contenidos:
tscon rdp-tcp#0 /dest:console
No estoy seguro exactamente cuándo se supone que se ejecutará, pero el concepto es evitar que la computadora de prueba se bloquee cuando se conecta a través de Escritorio remoto. Si eso ayuda, genial; No he podido probar la solución yo mismo y averiguar cómo configurarla. Tal vez alguien más pueda escribir una respuesta más concisa.
Quizás una sugerencia interesante ...
... trabajando con Selenium 2.47.x y 2.52.0 Jenkins, RDP e IE 11 en modo IE 7 (configuración por sitio web) en el servidor Win 2008. Adicional a esto, tengo pantallas conectadas a mi PC.
Si estoy desconectado del Win Server (no desconectado) tengo dos situaciones:
El programa JAVA en el servidor produce cuadros negros o pantallas reales. La diferencia es solo un marcador en las opciones de RDP en la parte de visualización en la configuración RDP local de mi cliente (Win 7).
No tengo una pantalla en inglés, así que espero que la traducción sea correcta.
El detalle de la configuración es: "usar todos los monitores por sesión remota"
Si este marcador está configurado, obtengo capturas de pantalla reales. Si este no está configurado, tengo cuadros negros. No puedo explicar por qué, pero funciona de esta manera ...
Tuve el mismo problema hace un tiempo, y aunque no entiendo completamente el problema, básicamente el proceso de selenio se estaba ejecutando bajo una cuenta de sistema y, por lo tanto, la interfaz gráfica de IE solo era visible en la sesión 0, mientras que la sesión 1 estaba mostrando solo una pantalla negra
La solución que funcionó para mí fue crear una cuenta de usuario local en el host remoto, mantener ese usuario permanentemente registrado y desbloqueado para que tenga un escritorio interactivo disponible, y luego ejecutar su aplicación / pruebas selenium como ese usuario. Sé que no es lo ideal, pero como teníamos docenas de cajas viejas por todas partes, no estaba de más utilizar uno como servidor de prueba dedicado. Espero que ayude un poco!
Lo siento, no hay suficiente representante para agregar esto como un comentario.
Windows a veces causaba pantallas negras porque la máquina / escritorio no estaba en uso.
es posible que desee intentar eliminar la línea de abajo
//NewDriver.Manage().Window.Size = new Size(1804, 1096);
maximice su navegador en su lugar.
NewDriver.Manage().Window.Maximize();