首先对我缺乏技术知识和可能的误解表示歉意,我是 C# 的新手。
我接管了一个项目,该项目抓取了许多网页并将它们保存为 .png 文件。
private void CaptureWebPage(string URL, string filePath, ImageFormat format)
{
System.Windows.Forms.WebBrowser web = new System.Windows.Forms.WebBrowser();
web.ScrollBarsEnabled = false;
web.ScriptErrorsSuppressed = true;
web.Navigate(URL);
while (web.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(5000);
int width = web.Document.Body.ScrollRectangle.Width;
width += width / 10;
width = width <= 300 ? 600 : width;
int height = web.Document.Body.ScrollRectangle.Height;
height += height / 10;
web.Width = width;
web.Height = height;
_bmp = new System.Drawing.Bitmap(width, height);
web.DrawToBitmap(_bmp, new System.Drawing.Rectangle(0, 0, width, height));
_bmp.Save(filePath, format);
_bmp.Dispose();
}
但是,某些页面(只有一小部分)会导致进程挂起。它不是所有的时间,但相当频繁。我发现问题似乎出在代码的以下部分:
while (web.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
System.Windows.Forms.Application.DoEvents();
看起来好像 web.ReadyState 卡在“交互式”并且永远不会进入“完成”,所以它只是一直循环。
如果 web.ReadyState = 'Interactive' 在一段时间内,是否可以输入导致该页面的进程重新启动的代码,如果是这样,语法是什么?