如何让 casperJS 等到 .change() 事件完成

How to make casperJS wait until .change() event is finished?

本文关键字:事件 change casperJS 等到      更新时间:2023-09-26

我在我的casperJS脚本中触发了一个更改事件,该事件触发了如下的AJAX请求:

casper.evaluate(function(i) {
    $("form:eq(2) select option:eq(" + i + ")").attr("selected", "selected").change();
},i);

如何让 casperJS 等到底层 AJAX 请求完成?已经尝试查看文档,但我或多或少陷入困境。谁能引导我走向正确的方向?

您始终可以使用 casper.wait 以静态方式执行此操作。

casper.thenEvaluate(function(i) {
    // change()
},i).wait(5000).then(function(){
    // further processing
});
并希望请求在 5 秒

内完成,但当请求比 5 秒早得多时,您可能会浪费一些等待时间。问题是,一旦请求完成并不意味着页面已准备就绪/已更改。

另一种可能性是等待请求完成,但要使其正常工作,您需要以某种方式注册请求的成功事件。大多数情况下,您无法从全局范围访问此内容。如果你这样做,那么你可以使用

casper.thenEvaluate(function(i) {
    window._someUniqueVariable = false;
    registerSuccessEvent(function(data){
        window._someUniqueVariable = true;
    });
},i).waitFor(function check(){
    return this.evaluate(function(){
        window._someUniqueVariable = true;
    });
}, function(){
    // further processing
});

一种更卡斯珀的方法是使用 casper.waitForResource ,但随后您需要事先知道 url 或至少能够从页面推断出它。

在一般情况下,当请求返回时,它会对您的页面执行某些操作。因此,您应该能够使用新元素或waitForSelectorTextChangewaitUntilVisible等进行waitForSelector

你可能错过了waitForResource

来自文档: http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitforresource

casper.waitForResource("you url here", function()
{
     // place your code here
});