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();
});
我不打算对给予好评。 我提供的解决方案可以解决某些情况,而无需使用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);
});
如何,我发现这个网址是什么?
简单:
请求包是为node.js编写的,不适用于PhantomJS。你可能帮助过OP,但你还没有回答这个问题。 –
亲爱的@ArtjomB!我正在回答Phill需要的解决方案。他只需要从另一个站点获取数据。这就是为什么我说当没有直接的url将所有数据作为json返回时,不需要phantomjs。 SO是我们帮助解决问题的地方。我的解决方案解决了解析数据的问题。我看到你是明智的,所以回答解决方案,而不是仅仅降低他人的答案和评论。这不是高尚人士的做法。 – num8er
这仍然不会帮助那些想要使用PhantomJS并来到这里*“ReferenceError:无法找到变量:$”*的人。这个问题不包含一个单词来支持你的观点,即OP只是想从页面下载一些JSON而没有其他的东西。投票是质量控制的一种形式。你自己的答案没问题,但它与问题无关,因为它被问到,我想至少让未来的读者感到沮丧。我觉得这样做很高尚。 –
有可能是你的代码和jQuery之间的竞争条件正在加载的页面上。将page.evaluate
回调中的语句换成$(document).ready(function() { /* your statements here */ });
以确保页面上的脚本已完全加载。
)当'page.open'回调函数被调用时DOM已经准备就绪,并且'''*'只能在['page.evaluate']内部访问(http://phantomjs.org/api /webpage/method/evaluate.html)。你不能在'page.evaluate' –
之外使用'$',你不能使用$(document)。如果jQuery尚未加载 – Fer
为什么不只是请求这个网址:https://fantasy.premierleague.com/drf/bootstrap-static?我没有看到使用phantomjs的好处,因为它实际上会自动请求API并获取数据。 – num8er
哇...我不相信实际存在,谢谢! –
您使用哪个** PhantomJS版本**?请注册onConsoleMessage,onError,onResourceError,onResourceTimeout事件([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js))。也许有错误。 –