0

Screenshot einer kompletten Webseite machen in C#

Screenshots machen ist eine Sache. Ein Klick auf die “Druck”-Taste (auf den meisten Tastaturen rechts neben F12), oder ein Aufruf der kürzlich von mir vorgestellten C# Methode, genügt. Was aber wenn man eine komplette Webseite festhalten will? Die meisten Seiten sind so lang, dass ein Scrollen, um den kompletten Inhalt zu sehen, unabdingbar ist.
Um auch in solchen Situationen einen vollständigen Screenshot erstellen zu können, hilft das nachfolgende Snippet.

 

 private void WebsiteScreenshot(string url, string file)
 {
     //Anlegen eines Webbrowser Objekts
     WebBrowser browser = new WebBrowser();

     //Scrollbars deaktivieren, damit sie nicht auf dem
     //Screenshot auftauchen
     browser.ScrollBarsEnabled = false;

     //(Java-)Scriptfehlermeldungen unterdrücken
     browser.ScriptErrorsSuppressed = true;

     //Die gewünschte Seite aufrufen
     browser.Navigate(new Uri(url));

     //Warten bis die Seite vollständig geladen und gerendert wurde
     while (browser.Document == null || browser.Document.Body == null)
            Application.DoEvents();

      //Abmessungen der kompletten Webseite ermitteln und auf das
      //Webbrowser Objekt übertragen
      Rectangle websiteSize = browser.Document.Body.ScrollRectangle;
      browser.Size = new Size(websiteSize.Width,websiteSize.Height);

      //Ein Bitma Objekt mit den Maßen der Webseite anlegen.
      Bitmap bmp = new Bitmap(websiteSize.Width, websiteSize.Height);

      //Die gerenderte Webseite auf das Bitmap Objekt zeichnen
      browser.DrawToBitmap(bmp,
           new Rectangle(0, 0, websiteSize.Width, websiteSize.Height));

      browser.Dispose();

      //Das Bitmap Objekt als Datei speichern
      bmp.Save(file, ImageFormat.Png);
 }

//Snippet von www.code-bude.net

Aufrufen könnt ihr die Methode dann wie folgt:

   //Solltet ihr eine andere Dateiendung angeben, denkt daran, den
   //ImageFormat-Typ in der Hauptmethode zu ändern!
   WebsiteScreenshot("http://code-bude.net/", "c:\\website_screenshot.png");

   //Snippet von www.code-bude.net

Sollten ihr noch Fragen oder Anregungen haben, gilt wie immer: Einfach einen Kommentar hinterlassen!
Viele Grüße,
Raffi

0

Screenshots erstellen in C#

Das nachfolgende Snippet kann dazu genutzt werden einen Screenshot in C#.Net zu machen.
Die damit erstellten Screenshots, gleichen denen, die mit der “Druck”-Taste auf der Tastatur erstellt werden. (Mal davon abgesehen, dass ihr bei der Nutzung des Snippets gleich ein nettes Bitmap Objekt habt, mit dem ihr weiter arbeiten könnt.)
Da das Snippet mehr als kurz ist, lass’ ich heute einfach mal den Code selbst sprechen.

private Bitmap Screenshot()
{
    //Bitmap in größe der Bildschirmauflösung anlegen
    Bitmap screen = new Bitmap(SystemInformation.VirtualScreen.Width,
                                         SystemInformation.VirtualScreen.Height);

    //Graphics Objekt der Bitmap anlegen
    Graphics g = Graphics.FromImage(screen);

    //Bildschirminhalt auf die Bitmap zeichnen
    g.CopyFromScreen(SystemInformation.VirtualScreen.X,
                             SystemInformation.VirtualScreen.Y,
                             0, 0, screen.Size);
    g.Dispose();

    //Screenshot zurückgeben
    return screen;
}

//Snippet von www.code-bude.net

Solltet ihr noch Fragen haben, oder meinen einen anderen oder einfacheren Weg zu kennen, so schreibt mir doch einen Kommentar.

Viele Grüße,
Raffi