我在C#console应用程序中使用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忙),所以系统很慢,需要重新启动
如何更改代码以防止此事发生并使我的应用程序保持高效?
答案 0 :(得分:7)
我认为,在您的示例代码中,只有一个时刻,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;
}
}
}