【问题标题】:WatiN - Waiting for CookiesWatiN - 等待 Cookie
【发布时间】:2011-02-27 22:40:53
【问题描述】:

我被指派创建一种“某种”网络爬行者。任务是访问某些网站,输入一段数据,然后提交该数据以接收结果。

我发现 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");

现在你可能明白我为什么要找到真正的解决方案了。

谢谢

【问题讨论】:

    标签: c# browser cookies watin wait


    【解决方案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");
    }
    

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

    【讨论】:

    • 确实这是我最初拥有它的一种方式。但是我发现,即使在页面加载之前清除 cookie 也是徒劳的,因为页面似乎生成了一个 cookie 模板,例如:'cookieData=6&cookieData2=6' 然后它似乎在 cookie 创建后更改了它们。 'cookieData=4&cookieData2=1' 我希望有一些更准确的方法,谢谢。感谢您的反馈,但非常感谢!
    • 如果您无法判断 cookie 是否“更新”,那么您能做的最好的事情就是决定您准备等待多长时间,然后等待那么久。它不会是可靠的,但我看不到任何其他方式。
    • 也就是说 - 如果你在你调用的页面中四处寻找,你可以注入一些 javascript 并在它“完成”时通知你,这取决于它是如何工作的
    • 如你所说。注入 Javascript 是我认为我将要研究的解决方案。我确信有某种 Javascript 功能可以告诉我 cookie 何时创建以及何时准备就绪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多