我被指派创建一种'网络爬行者'。任务是进入某些网站,输入一段数据然后提交该数据以获得结果。
我发现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");
现在您可以理解我为什么要找到真正的解决方案。
由于
答案 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");
}
这不是一个很好的方法,但它应该在没有更好的情况下工作。