我使用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();
此代码只完成解析一个页面,但不会重定向到下一页并解析它。 我做错了什么?
答案 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');
。