Не могу найти переменную - PhantomJS
Я пишу здесь после многих часов бесплодных поисков. PhantomJS не позволяет мне использовать переменную, как в коде ниже, с сообщением об ошибке при запуске моего скрипта "Не удается найти переменную".
У вас есть идеи, где может быть моя проблема?
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();
}
})
Спасибо =)
1 ответ
В кратком руководстве (в разделе " Оценка кода ") содержится важная информация:
Чтобы оценить код JavaScript или CoffeeScript в контексте веб-страницы, используйте функцию valu (). Выполнение является "песочницей", код не может получить доступ к любым объектам и переменным JavaScript вне контекста своей страницы. Объект может быть возвращен из метода rate(), однако он ограничен простыми объектами и не может содержать функции или замыкания.
Таким образом, проблема с вашим кодом состоит из двух частей:
- переменная
elem
инициализируется вне контекста веб-страницы, он недоступен со второгоevaluate
, - Вы возвращаете непростой объект, то есть элемент DOM.
Эту проблему легко решить, в основном, путем правильной разработки кода, который бы соответствовал фактической "заключенной в тюрьму" модели выполнения. Пожалуйста, внимательно прочитайте всю соответствующую документацию и изучите множество включенных примеров.