我在 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;
}
}
}
关于c# - 大量使用 Watin,IE 保持打开问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379222/