Capturar una página Web de manera sencilla

Por si alguien necesita una funcionalidad parecida a lo que ofrecen sitios como WebSnapr o Snap, a continuación pongo la manera de capturar una página web como imagen.

csharp:
string url = "http://www.buayacorp.com/";
using (WebBrowser navegador = new WebBrowser())
{
    // Tamaño del navegador
    navegador.Size = new Size(1024, 768);
    // Deshabilitar la barra de scroll
    navegador.ScrollBarsEnabled = false;

    // Cargar la página
    navegador.Navigate(url);

    // Esperar a que cargue completamente la página
    while (navegador.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    // Tamaño de la imagen a capturar
    Rectangle tamaño = new Rectangle(0, 0, 1024, 768);
    Bitmap bitmap = new Bitmap(tamaño.Width, tamaño.Height);

    // Guardar la imagen de la página con el tamaño especificado
    navegador.DrawToBitmap(bitmap, tamaño);

    // Convertir y guardar la imagen como jpg
    Bitmap thumbnail = new Bitmap(tamaño.Width, tamaño.Height);
    Graphics gfx = Graphics.FromImage(thumbnail);
    gfx.DrawImage(bitmap, tamaño, tamaño, GraphicsUnit.Pixel);

    thumbnail.Save(@"E:\demos\demo.jpg", ImageFormat.Jpeg);
}

Esa porción de código hace una captura de 1024x728 pixeles, si se quiere capturar la página completa sólo es necesario jugar con los valores de navegador.Document.Body.ClientRectangle.

Por otro lado, como seguramente saben la clase WebControl usa internamente los controles de Internet Explorer disponibles en la máquina donde se ejecuta la aplicación, así que si un sitio se ve mal con este navegador, la imagen capturada también tendrá este pequeño problema.

6 Replies to “Capturar una página Web de manera sencilla”

  1. Ocurre algo extraño. Al intentar capturar alguna página como Google o Yahoo!, simplemente se ve todo blanco. ¿Cuál es el motivo?

  2. al ejecutar estas lineas de codigo, me guarda una imagen que es abajo negra y todo el resto blanco. Me di cuenta que me falta un using y una referencia para que me permita usar el metodo DrawToBitmap del navegador que no se cual es. Alguien podría decirmelo?
    Gracias!!!

  3. Hola, excelente ejemplo de codigo auque no lo probe aun, porque lo que yo quiero es algo muy parecido a este ejemplo:

    1.- Cargar una pagina en el webBrowser
    2.- Guardar una imagen cualquiera desde el webBriwser a mi disco duro, por decirles asi WB.document.images[0].Save("d:/imagenes")

    Alguien me puede ayudar en esto parece sencillo pero llevo tiempo sinpoder hacerlo

  4. Aqui un ejemplo en vb.net , el ejemplo funciona pero la imagen debe ser realizada solo en el evento document_completed del webBrowser, no se porque pero asi es

    Dim WithEvents wb As New WebBrowser

    Private Sub Form1_Load(...........)
    AddHandler wb.DocumentCompleted, AddressOf document_completed
    wb.Navigate("www.google.com")
    End Sub

    Sub document_completed()
    Dim bmp As New Bitmap(300, 300)
    wb.DrawToBitmap(bmp, New Rectangle(0, 0, 300, 300))
    pictureBox1.Image = bmp
    End Sub

    Bolivia es una mentira total, los ricos en bolivia se encuentran en la PAZ y apoyan a EVO morales, pero hacen una lucha falsa en contra de personas de otros dptos.

Comments are closed.