Каспер - понимание оценивает с отзывами функции

Это - что-то вроде хитрого вопроса.

Я очень знаком с JavaScript, однако я нахожусь на проекте, который автоползает использование веб-сайта PhantomJS и CasperJS. Это совершенно новые предметы мне.

Я смог выяснить, как использовать Каспера и провести, авторизовался в страницы, и т.д., однако это громоздкое, поскольку общий поток, кажется:

casper.start('http://google.fr/');

casper.then(function() {
    this.echo("I'm in your google.");
});

casper.then(function() {
    this.echo('Now, let me write something');
});

casper.then(function() {
    this.echo('Oh well.');
});

casper.run();

Моя проблема с этим состоит в том, что я хочу сделать все виды вещей с веб-сайтом, в зависимости от того, какие данные получены с ним. Я не могу предварительное расположение последовательность навигаций и не иметь его изменение. Я надеюсь, что это имеет смысл.

Чтобы решить это, я создал объект Навигатора JavaScript со встроенными функциями. Мое общее понятие было:

navigator.logIn(function() 
{
  navigator.actionA(parameters, function() 
  {
    if (navigator.data.a == navigator.data.b) {
      navigator.actionB();
    } else {
      navigator.actionC();
    }
  });
});

И включенный в каждую из этих функций были бы функции casper.

Вот сокращенная версия моего фактического кода, и где вещи начали становиться броскими:

var casper = require('casper').create({
    clientScripts:  [ 'jquery.min.js' ],
    onError: function(self, m) {  
        console.log('FATAL:' + m);
        self.exit();              
    },
});

var navigator = new _Navigator();

function _Navigator() { }

_Navigator.prototype.logIn = function(aCallback)
{
  var self = this;

  casper.start('https://website/login.asp', function() 
  {
    if (1 == 1) {
      this.evaluate(function() {
        $("input[name=blah]").val('blahblah');
      });

     //... A LOT MORE CODE
      aCallback();
    }
  });  
}

_Navigator.prototype.search = function(aDataSet, aCallback)
{
  var self = this;

  console.log('this works');
  casper.then(function(){
    console.log('this works');
  });

  var firstName = 'foobar';

  casper.then(function(){
    console.log('this works');
    this.evaluate(function()
    {
      console.log('this no longer works!!');
      $('input[id=blah]').val(firstName);
      aCallback();
    });
  });
}

navigator.logIn(function() {
 //LOG IN RUNS, AND CALLS BACK SUCCESSFULLY...
  navigator.search({'dataset'}, function() 
  {
    console.log('This never runs');
  });
});

casper.run();

Вы заметите, что в функции navigator.login, я называю casper.start (); В этом хорошо работает функция оценки, однако тогда я делаю функцию обратного вызова в этом casper.start (); В моем отзыве я вызываю следующую функцию, navigator.search, который я предполагаю, все еще технически выполняет в casper.start?

Когда я пытаюсь управлять casper.evaluate в этой новой функции, вызванной первой функцией обратного вызова, все, кажется, ведет себя прекрасное за исключением того, что casper.evaluate больше не работает! Это, кажется, ест функцию, не печатая регистраций пульта или чего-либо.

Я попробовал все на этом. Я не уверен, как сделать это правильно. У кого-либо есть какие-либо предложения на том, что я делаю неправильно? Спасибо.

2
nl ja de
Попробуйте помещает некоторую регистрацию, так посмотрите то, что происходит. Это может помочь: stackoverflow.com/questions/11121734/evaluate-doesnt-work/…
добавлено автор user2252541, источник

2 ответы

Я знаю, что это довольно старо, но: что продолжается, вот комбинация двух проблем:

  • casper.evaluate() , кажется, ест все ошибки в текущем стеке - onError не будет бежать изнутри .evaluate() отзыв.

  • Функции, используемые в .evaluate , является не стандартные закрытия - они поигрались в песочнице и не имеют никакого доступа к переменным вне их объема, если не передано как явные аргументы, чтобы casper.evaluate . Таким образом в оцененной функции, где вы звоните aCallback() нет никакого aCallback в объеме, и функция потерпит неудачу (тихо) с ReferenceError .

3
добавлено

casper.evaluate() как окно на безголовый сеанс браузера. Что-либо, что происходит в функциях, переданных, чтобы оценить, не появляется на вашем местном пульте. Однако можно или зарегистрироваться, любая стоимость, возвращенная из, оценивают или печатают всю продукцию, настраивая слушателя:

  casper.on('remote.message', function(message) {
    console.log(message);
  });
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском