Ich habe ein Programm (Derzeit winform), die eine Website lädt, macht einen Screenshot und konvertiert in Bitmap und speichert dann. Das Problem, auf das ich stoße, ist, dass Daten nicht auf die Website geladen werden können. Warum ich denke, dass es das ist, es dauert den Screenshot zu schnell und hat keine Zeit, um vollständig geladen zu werden.Hinzufügen von Verzögerung zu Website-Screenshot
Beispiel: Unter der 'Statistik' sollte eine Reihe von Informationen erscheinen, die noch nicht geladen zu sein scheint.
Ich habe versucht, ein Threading.sleep
an einigen Stellen setzen, aber es ist nicht das Ergebnis ändern.
-Code
Private Sub btnDrawBmp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Capture.Click
' Initialize new Hidden Browser control and navigate to site
Dim Browser As New WebBrowser
Browser.ScrollBarsEnabled = False
Browser.Navigate("http://xxxxx/LiveStats/")
' Initialize Handler for DocumentCompleted event and wait for that event to fire
AddHandler Browser.DocumentCompleted, AddressOf Browser_DocumentCompleted
While Browser.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
' Housekeeping
Browser.Dispose()
End Sub
Private Sub Browser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
' If sender was a WebBrowser then initialize a reference to it otherwise throw an exception
Dim Browser As WebBrowser = DirectCast(sender, WebBrowser)
' Set browser start size, determine scrollheight, resize browser to match scrollheight
Browser.ClientSize = New Size(1024, 768)
Dim Height As Integer = Browser.Document.Body.ScrollRectangle.Bottom
Browser.ClientSize = New Size(1024, Height)
' Initialize bitmap to match width & scrollheight for fullsize screen capture
Dim Bmp = New Bitmap(Browser.Bounds.Width, Height)
' Capture fullsize screen shot
Browser.DrawToBitmap(Bmp, Browser.Bounds)
Bmp.Save("c:\temp1.png")
' Resize Browser for thumbnail capture
Browser.ClientSize = New Size(1024, 768)
' Inialize a new bitmap with the same client area size as the browser
Dim Bmp2 = New Bitmap(Browser.Bounds.Width, Browser.Bounds.Height)
' Perform screen capture, convert it to a thumbnail, and save
Browser.DrawToBitmap(Bmp2, Browser.Bounds)
Bmp2 = Bmp2.GetThumbnailImage(160, 120, Nothing, IntPtr.Zero)
Bmp2.Save("c:\temp2.png")
' Housekeeping
Bmp.Dispose()
Bmp2.Dispose()
End Sub
Aktualisiert Code, der immer noch mit Problemen sind:
Hinweis: Nur zwei Objekte auf dem Formular eine Schaltfläche und ein Browser.
Private Sub btnDrawBmp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Capture.Click
' Initialize new Hidden Browser control and navigate to site
'Dim Browser As New WebBrowser
Dim Browser = wb
Browser.ScrollBarsEnabled = False
Browser.Navigate("http://ssgw8sr01/LiveStats/")
'Browser.Navigate("http://google.com")
' Initialize Handler for DocumentCompleted event and wait for that event to fire
AddHandler Browser.DocumentCompleted, AddressOf Browser_DocumentCompleted
While Browser.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
' Housekeeping
Browser.Dispose()
End Sub
Private Sub Browser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
If (e.Url = wb.Url) AndAlso (wb.ReadyState = WebBrowserReadyState.Complete) Then
' If sender was a WebBrowser then initialize a reference to it otherwise throw an exception
Dim Browser As WebBrowser = DirectCast(sender, WebBrowser)
' Set browser start size, determine scrollheight, resize browser to match scrollheight
Browser.ClientSize = New Size(1024, 768)
Dim Height As Integer = Browser.Document.Body.ScrollRectangle.Bottom
Browser.ClientSize = New Size(1024, Height)
' Initialize bitmap to match width & scrollheight for fullsize screen capture
Dim Bmp = New Bitmap(Browser.Bounds.Width, Height)
' Capture fullsize screen shot
Browser.DrawToBitmap(Bmp, Browser.Bounds)
Bmp.Save("c:\temp1.png")
' Resize Browser for thumbnail capture
Browser.ClientSize = New Size(1024, 768)
' Inialize a new bitmap with the same client area size as the browser
Dim Bmp2 = New Bitmap(Browser.Bounds.Width, Browser.Bounds.Height)
' Perform screen capture, convert it to a thumbnail, and save
Browser.DrawToBitmap(Bmp2, Browser.Bounds)
Bmp2 = Bmp2.GetThumbnailImage(160, 120, Nothing, IntPtr.Zero)
Bmp2.Save("c:\temp2.png")
' Housekeeping
Bmp.Dispose()
Bmp2.Dispose()
End If
End Sub
Sie sollten wahrscheinlich eine Asynchron-Version von Seite Loader verwenden, die Sie benachrichtigt, wenn der Ladevorgang abgeschlossen ist, so dass Sie in diesen Fragen nicht – VSG24
laufen @ VSG24 nicht sicher, was „async“ ist. Versucht zu googeln es gebunden an meine Frage und fand nicht viel – dwb
Suche nur nach "VB.Net asynchrone Programmierung" – VSG24