单击按钮后,CasperJS将解析下一页

时间:2014-04-25 11:37:43

标签: javascript casperjs

我使用casperjs来进行一些测试。

算法是打开URL解析页面,单击按钮加载下一页。 如何抓住下一页直到测试完成。 所有问题都是随机的,在提交表格之前我现在不会提出下一个问题。

我需要解析页面,如循环或递归。 我的代码是:

casper.start(startUrl, function () {
    this.click('#training');
    this.evaluate(function () {
        $('input[type="submit"]:first').click();
    });
});

casper.then(function () {
    var currentUrl = this.getCurrentUrl(),
        startIdPos = currentUrl.indexOf('=') + 1,
        questionId = currentUrl.slice(startIdPos),
        content = $(this.getHTML()),
        answers = [],
        question,
        startCorrectAnswerPos = content.find('script:nth-child(2)').html().indexOf('var bc='),
        correctAnswer = content.find('script:nth-child(2)').html().slice(startCorrectAnswerPos + 8, startCorrectAnswerPos + 9);

    question = content.find('table.quizz p.qw').html();

    console.log(">>>>>>" + this.getCurrentUrl());

    this.fill('form', {
        'answer': correctAnswer
    }, true);
});

casper.run();

此代码只完成解析一个页面,但不会重定向到下一页并解析它。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

编辑:您需要为以下页面嵌套步骤,因为在您评估的每个页面上是否需要更进一步。您还应在提交表单后检查URL。

function answer() {
    var currentUrl = this.getCurrentUrl(),
        startIdPos = currentUrl.indexOf('=') + 1,
        questionId = currentUrl.slice(startIdPos),
        content = $(this.getHTML()),
        answers = [],
        question,
        startCorrectAnswerPos = content.find('script:nth-child(2)').html().indexOf('var bc='),
        correctAnswer = content.find('script:nth-child(2)').html().slice(startCorrectAnswerPos + 8, startCorrectAnswerPos + 9);

    question = content.find('table.quizz p.qw').html();

    console.log(">>>>>>" + this.getCurrentUrl());

    if (question) {
        this.then(function(){
            this.fill('form', {
                'answer': correctAnswer
            }, true);
        });
        this.then(answer);
    }
};

casper.then(answer);

为您的casper.then阻止交换此代码。


上一个答案:我不知道什么样的按钮/链接#training,但可能需要等待页面中的更改发生。您可以使用casper.waitForSelector功能。

我也不确定你为什么写

this.evaluate(function () {
    $('input[type="submit"]:first').click();
});

而不仅仅是this.click('input[type="submit"]:first');