c# - 大量使用 Watin,IE 保持打开问题

标签 c# asp.net watin

我在 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/

相关文章:

c# - 二元表达式无法转换为 LINQ 中的谓词表达式

c# - 我们可以将 UTC 时间转换为 24 小时格式吗?如果是,那么如何?

c# - 在 Asp.net Rowcommand 事件中获取行索引

c# - 如何在基于表单的身份验证中检查用户是否登录

c# - 如何找到在执行期间调用特定方法的单元测试?

c# - NullReferenceException 包含 LINQ 表达式 MVC3

c# - 多用户 ASP.NET Web 应用程序中静态变量的范围

c# - 线程状态异常

c# - 在 Windows 2008 Server 上通过 TFS 进行 WatiN

c# - Watin :select item from dropdown list, 它的值是从另一个下拉列表中填充的