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