Я пытаюсь запустить несколько экземпляров CasperJS на том же самом процессе, мой тестовый код выглядит примерно так:Может ли CasperJS запускать несколько экземпляров в одном процессе?
['user1,pass1', 'user2,pass2'].forEach(function(account) {
var casperInstance = require('casper').create({
verbose: true,
logLevel: "debug",
webSecurityEnabled: false,
pageSettings: {
loadImages: true,
loadPlugins: true,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
}
});
runit(casperInstance, account);
});
function runit(casperi, account) {
casperi.options.viewportSize = {width: 1920, height: 1080};
var account = account.split(',');
casperi.start('https://www.example.com/login/', function () {
var x = require('casper').selectXPath;
this.fill('form.loginForm', {
'username': account[0],
'password': account[1]
}, false);
this.click(x('//*[text()="Log in"]'));
}).waitForUrl(/https:\/\/www.example.com\/$/, function then() { // have to use this because the form is submitted with ajax, is there a better way?
//this.echo(this.getHTML());
this.echo('Logged in');
}, function OnTimeout() {
this.echo('Login Failed');
}, 20000);
casperi.run();
}
С только одной учетной записи на массиве он прекрасно работает, но с двумя или более, он всегда раз, я не думаю, что мой код работает с несколькими экземплярами casper, потому что если я заменил весь код входа, чтобы просто распечатать html (или что-то еще), он просто распечатает его один раз.
Есть ли способ запуска нескольких экземпляров CasperJS в одном процессе или это единственное решение для создания пусковой установки для запуска нескольких процессов?
Интересно, почему я не могу получить правильные результаты при параллельном тестировании Casper против того же самого ранга. Иногда они запускают сервер, отвечают правильными данными, иногда нет. –
@Canadian_Republican Нет, вероятно, нет. Но если сайт использует 'localStorage', то это, скорее всего, проблема. Единственное, что PhantomJS сохраняется на диске по умолчанию, это 'localStorage'. Таким образом, несколько экземпляров CasperJS, работающих в разных процессах PhantomJS, могут перезаписывать «localStorage» друг друга. Хотя я не могу быть уверен. –