我使用了here
看起来非常简单易用的代码protected void Capture(object sender, EventArgs e)
{
string url = txtUrl.Text.Trim();
Thread thread = new Thread(delegate()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 768;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;
using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))
{
browser.DrawToBitmap(bitmap, new Rectangle(0, 0, browser.Width, browser.Height));
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
imgScreenShot.Visible = true;
imgScreenShot.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(bytes);
}
}
}
但是,当我在Facebook网址或某些其他网站上运行时,我会得到一张全白的结果图片。有时我会得到初始页面的部分,所以看起来像是对所有新网络技术的时间问题。
WebBrowser可能正在指示ReadyState of Complete,即使页面上的元素仍在继续加载。
如果我添加一些Thread.Sleeps,它似乎没有帮助。
答案 0 :(得分:0)
这是因为DocumentCompleted
不仅会发射一次,在你的情况下还为时过早。
看看这个:Why is WebBrowser_DocumentCompleted() firing twice?