WatiN - 等待Cookies

时间:2011-02-27 13:14:12

标签: c# browser cookies watin wait

我被指派创建一种'网络爬行者'。任务是进入某些网站,输入一段数据然后提交该数据以获得结果。

我发现WatiN是一个很好的工具,可以获取这些数据,因为它是开源的,并且具有我需要的所有功能 - 即使这是滥用测试API(是否误用?)。

无论如何 - 真正的问题是,

Browser.WaitForComplete();

不等待一切加载。它似乎只是等待最后的body标签然后返回。但是我相信当页面加载完成时不会生成cookie,因为它是由ASP.NET后端生成的 - 它似乎是在一个看起来像AJAX的交互式对象之后加载它们。

我不拥有或托管该网站,因此只能根据我从浏览器和其他工具中看到的内容收集信息。

有没有办法让WatiN等待更新cookie?

先谢谢。

约翰。

编辑:

作为我正在做什么来解决这个问题的一个例子(这有点不正统,但它正在修复它一分钟)。

Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();

var cookie = Browser.Eval("document.cookie");

现在您可以理解我为什么要找到真正的解决方案。

由于

1 个答案:

答案 0 :(得分:1)

我不确定是否可以为此捕获事件,因为我怀疑必须在页面上运行最终更新cookie的javascript。

如果你可以区分“旧”和“更新”的cookie,你可以尝试这样的事情:

// Maximum number of loops, to avoid infinite loops
int maxLoops = 10;

// Wait for the page to complete
Browser.WaitForComplete();

// Grab a copy of the current cookie
var cookie = Browser.Eval("document.cookie");

// HACK: Dirty hack to wait for cookie to be updated
while (CookieIsNotUpdated(cookie) && i++ <= maxLoops)
{
    Browser.WaitForComplete(); // (Or other wait/sleep)
    cookie = Browser.Eval("document.cookie");
}

这不是一个很好的方法,但它应该在没有更好的情况下工作。