Phantomjs - 的ReferenceError:找不到变量:$

问题描述:

我有一个PhantomJS脚本时,我本地运行(苹果机),但是当我在我的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

为什么不只是请求这个网址:https://fantasy.premierleague.com/drf/bootstrap-static?我没有看到使用phantomjs的好处,因为它实际上会自动请求API并获取数据。 – num8er

+1

哇...我不相信实际存在,谢谢! –

+1

您使用哪个** PhantomJS版本**?请注册onConsoleMessage,onError,onResourceError,onResourceTimeout事件([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js))。也许有错误。 –

我不打算对给予好评。 我提供的解决方案可以解决某些情况,而无需使用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。你可能帮助过OP,但你还没有回答这个问题。 –

+0

亲爱的@ArtjomB!我正在回答Phill需要的解决方案。他只需要从另一个站点获取数据。这就是为什么我说当没有直接的url将所有数据作为json返回时,不需要phantomjs。 SO是我们帮助解决问题的地方。我的解决方案解决了解析数据的问题。我看到你是明智的,所以回答解决方案,而不是仅仅降低他人的答案和评论。这不是高尚人士的做法。 – num8er

+2

这仍然不会帮助那些想要使用PhantomJS并来到这里*“ReferenceError:无法找到变量:$”*的人。这个问题不包含一个单词来支持你的观点,即OP只是想从页面下载一些JSON而没有其他的东西。投票是质量控制的一种形式。你自己的答案没问题,但它与问题无关,因为它被问到,我想至少让未来的读者感到沮丧。我觉得这样做很高尚。 –

有可能是你的代码和jQuery之间的竞争条件正在加载的页面上。将page.evaluate回调中的语句换成$(document).ready(function() { /* your statements here */ });以确保页面上的脚本已完全加载。

+0

)当'page.open'回调函数被调用时DOM已经准备就绪,并且'''*'只能在['page.evaluate']内部访问(http://phantomjs.org/api /webpage/method/evaluate.html)。你不能在'page.evaluate' –

+0

之外使用'$',你不能使用$(document)。如果jQuery尚未加载 – Fer