2016-09-27 2 views
8

У меня есть сценарий PhantomJS, который работает, когда я запускаю его локально (Mac), но когда я запускаю его на моем сервере Linux, он возвращает следующую ошибку:

ReferenceError: Can't find variable: $ 
https://fantasy.premierleague.com/a/statistics/value_form:5712 in global code 

код:

var page = require('webpage').create(); 
var fs = require('fs'); 
var args = require('system').args; 
page.settings.userAgent = 'SpecialAgent'; 

page.open('https://fantasy.premierleague.com/a/statistics/value_form', function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     var ua = page.evaluate(function() { 
     var result =""; 
     // ... 
     return result; 
    });  

    } 
    phantom.exit(); 
}); 
+2

Почему бы не просто запросить этот URL-адрес: https://fantasy.premierleague.com/drf/bootstrap-static? Я не вижу преимущества использования phantomjs, потому что в действительности он автоматически запрашивает api и получает данные. – num8er

+1

Вау ... Я не могу поверить, что на самом деле существует, спасибо! –

+1

Какие ** версии PhantomJS ** вы используете? Пожалуйста, зарегистрируйтесь в событиях onConsoleMessage, 'onError',' onResourceError', 'onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js)). Возможно, есть ошибки. –

ответ

-3

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

Вам нужны данные со страницы, так почему бы не просто сделать запрос на этот адрес: https://fantasy.premierleague.com/drf/bootstrap-static

var request = require('request'); // install: npm i request 
var fs = require('fs'); 
var args = require('system').args; 

request.get({url: 'https://fantasy.premierleague.com/drf/bootstrap-static'}, function(err, response, body) { 
    console.log(body); 
}); 

Как я нашел этот адрес?

Простой:

firebug inspect net

+1

Пакет запросов написан для node.js и не будет работать с PhantomJS. Возможно, вы помогли ОП, но вы еще не ответили на вопрос. –

+0

Уважаемый @ArtjomB! Я отвечаю на решение, которое нужно Филлу. И ему нужно просто взять данные с другого сайта. Вот почему я говорю, что нет необходимости в phantomjs, когда есть прямой url, который возвращает все данные как json. Это место, где мы помогаем решать их проблемы. И мое решение решило проблему анализа данных. Я вижу, что ты мудр, так что ответь на решение, а не только на опрос других ответов и комментариев. Дело не в благородстве. – num8er

+2

Это все равно не поможет людям, которые хотят использовать PhantomJS, и приходят сюда для * "ReferenceError: Не могу найти переменную: $" *. В вопросе не содержится ни слова, чтобы поддержать ваш аргумент, что OP просто хотел скачать JSON со страницы и ничего больше. Голосование - это форма контроля качества. Ваш ответ в порядке, но он не имеет ничего общего с вопросом, как его спрашивали, и я хочу как можно скорее расстраиваться для будущих читателей. Я чувствую себя очень благородно, делая это. –

1

Там может быть состояние гонки между кодом и JQuery погрузкой на этой странице. Оберните операторы в своем обратном вызове page.evaluate с помощью $(document).ready(function() { /* your statements here */ });, чтобы обеспечить полную загрузку сценариев на странице.

+0

DOM готов, когда вызывается обратный вызов 'page.open'. Кроме того,' $ 'is * only * доступен внутри [' page.evaluate'] (http://phantomjs.org/api /webpage/method/evaluate.html).Вы не можете использовать '$' вне 'page.evaluate' –

+0

, вы не можете использовать $ (документ). если jQuery еще не загружен – Fer

Смежные вопросы