【问题标题】:Casperjs unexpected exitCasperjs 意外退出
【发布时间】:2015-08-10 16:07:11
【问题描述】:

我正在尝试从多个页面下载文件。我以为我会点击next 按钮直到它被禁用,但由于某种原因,casperjs 在 2 页后停止(直到最后还有 4 页)。

我是 casperjs 的新手,所以我似乎只是不了解一些基本概念。

代码

var casper = require('casper').create();
casper.on('load.finished', function (status) {
    if (status !== 'success') {
        this.echo ("Failed to load page.");
    }
    else {
        //download_files_from_page();
         this.echo ("1");
         casper.click("#MainContent_btnNext1");
 }
});
casper.start('http://matrixcatalog.co.il/NBCompetitionRegulations.aspx');
casper.run();

预期输出

1 1 1 1

实际输出

1 1

【问题讨论】:

    标签: javascript casperjs exit


    【解决方案1】:

    您可能退出得太早了。如果 CasperJS 执行的步骤用完了,它会自动退出。只有then*wait*run 函数会向队列中添加一个步骤。

    简单修复 #1:

    casper.click(...) 更改为casper.thenClick(...)

    简单修复 #2:

    将一个空函数传递给run

    casper.run(function(){});
    

    点击前退出:

    if(!this.exists("#MainContent_btnNext1")) {
        this.exit();
        return;
    }
    

    正确修复:

    您应该使用适当的递归迭代,因为其他方法基于的假设可能不适用于 CasperJS 的未来版本。

    function handlePage(status) {
        if (!this.exists(nextSelector)) {
            this.echo("finished");
        } else {
            // do something
            this.thenClick(nextSelector, handlePage);
        }
    });
    casper.start(url, handlePage).run();
    

    【讨论】:

    • 嗨,Artjom。非常感谢您的帮助。不幸的是,没有一个修复对我有用。第一个它在一次迭代后退出。第二个修复:casper 没有退出,但似乎 load.finished 回调只被触发了一次。第三个修复:在 2 次迭代后退出。
    • 我忘记了一些对“正确修复”很重要的东西。不幸的是,该站点在 Firefox 中不适合我,所以我无法测试它的行为方式。当您点击“下一步”按钮时,是加载了新页面还是异步重新加载了表格?
    • 新页面已加载。当我点击 javascript 向服务器发送 post 请求时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多