我在C#控制台应用程序中使用Watin来抓取网站,同时运行五个控制台应用程序.我部分使用Watin作为爬虫的原因是因为一些网站使用javascript(或ajax)来设置页面内容.
以下是获取页面评论计数的示例代码:
Settings.Instance.MakeNewIeInstanceVisible = false; using (var browser = new IE(commentLink, true)) { browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20); Span commentSpan = browser.Span("COUNT_TOTAL"); if (commentSpan.Exists) { int commentCount; if (Int32.TryParse(commentSpan.InnerHtml, out commentCount)) { return commentCount; } } }
我的问题是运行这5个控制台应用程序一段时间后(90分钟),很多IE实例保持打开(因为超时或错误或IE忙),所以系统很慢,需要重新启动.
如何更改我的代码以防止此事发生并使我的应用程序保持有效?
我想,在你的示例代码中,只有一个时刻,当IE不会接近时.由于你在里面using
,即使using
发生异常,浏览器也会被处理掉,所以一切都很好.
但在创建浏览器的那一刻:
new IE(commentLink, true)
你不在里面using
,没有魔法try...catch
.试试这个,让我知道它是否有帮助:
Settings.Instance.MakeNewIeInstanceVisible = false; using (var browser = new IE(true)) { browser.GoTo(commentLink); browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20); Span commentSpan = browser.Span("COUNT_TOTAL"); if (commentSpan.Exists) { int commentCount; if (Int32.TryParse(commentSpan.InnerHtml, out commentCount)) { return commentCount; } } }