Подтвердить что ты не робот

Невозможно найти переменную - PhantomJS

Я публикую здесь после многих часов бесплодных поисков. PhantomJS не позволяет мне использовать переменную, как в приведенном ниже коде, с сообщением об ошибке при запуске моего script "Невозможно найти переменную".

Есть ли у вас какие-либо идеи, где может быть моя проблема?

page.open(myurl, function (status) {

    if (status == 'success') {

        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() {

            elem = page.evaluate(function () {

                /* Select one element with jQuery */
                myElem = $('body');
                return myElem;

            })

            var elemHtml   = page.evaluate(function() { return $(elem).html(); });
            console.log(elemHtml);

        })

        phantom.exit();     

    }  

})

Спасибо =)

4b9b3361

Ответ 1

В учебном пособии Quick Start содержится важная информация (в разделе Оценка кода):

Чтобы оценить код JavaScript или CoffeeScript в контексте веб-страницы, используйте функцию оценки(). Выполнение "изолировано", для кода не существует доступа к каким-либо объектам и переменным JavaScript вне его собственного контекста страницы. Объект может быть возвращен из метода оценки(), однако он ограничен простыми объектами и не может содержать функции или замыкания.

Таким образом, проблема с вашим кодом двояка:

  • Переменная elem инициализируется вне контекста веб-страницы, она недоступна для второго evaluate.
  • Вы возвращаете непростой объект, т.е. элемент DOM.

Это простая проблема для решения, главным образом, путем правильного проектирования кода, соответствующего реальной модели исполнения "под стражей". Пожалуйста, внимательно прочитайте всю соответствующую документацию и изучите тон включенных примеров.