Casperjs click() элемент формы для отправки, ожидания, запуска запросов на следующей странице?
Я хотел бы нажать кнопку отправки, дождаться загрузки следующей страницы, а затем получить html на этой второй странице. Я запускаю, а затем запускаю, но затем этот шаг все еще выполняется на первой странице. Любые идеи?
var casper = require('casper').create();
var site = 'http://www.example.com';
var data = {};
casper.start(site, function() {
this.evaluate(function() {
$('input[type="submit"]:first').click();
});
});
casper.then(function() {
data.body = this.evaluate(function() {
var rows = $('#content table:first tbody tr');
var listings = rows.eq(3).text();
var count = rows.eq(4).text();
return {
listings: listings,
count: count
};
});
});
casper.run(function() {
this.echo(data.body.listings);
this.exit();
});
Ответы
Ответ 1
Это только частично решает вашу проблему, но вы можете подтвердить, что вы перешли на вторую страницу с помощью waitFor. Например:
this.waitFor(function check() {
return (this.getCurrentUrl() === PAGE_2_URL);
},
function then() { // step to execute when check() is ok
this.echo('Navigated to page 2', 'INFO');
},
function timeout() { // step to execute if check has failed
this.echo('Failed to navigate to page 2', 'ERROR');
});
Ответ 2
Хорошая идея использовать waitForResource для завершения загрузки страницы, см. документацию здесь документация
Пример:
casper.waitForResource(function checkAuth(validcredentials) {
return validcredentials;
}, function onReceived() {
if (authTitle !== this.getTitle()) {
this.log('Autenticação realizada com sucesso, aguarde...');
} else {
// this.capture('pic3.png');
this.log('Usuario ou senha invalidos!', 'ERROR');
this.die('User or password invalids!', 1); }
});
Ответ 3
У меня аналогичная проблема с doubleclick. Убедитесь, что событие щелчка действительно запущено. Я подозреваю, что это является причиной следующего шага в одном содержимом.