我想在我的node.js脚本中使用phantomjs。有一个phantomjs-node库..但不幸的是,作者用这种怪异的咖啡脚本代码来解释他在做什么:phantomjs可以使用node.js吗?
phantom = require 'phantom'
phantom.create (ph) ->
ph.createPage (page) ->
page.open "http://www.google.com", (status) ->
console.log "opened google? ", status
page.evaluate (-> document.title), (result) ->
console.log 'Page title is ' + result
ph.exit()
现在,如果我要使用phantomjs直接使用JavaScript,它会看起来像this:
var page = require('webpage').create();
page.open(url, function (status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
});
所以基本上我试图写上去的代码上面普通的JavaScript的第一个片段的当量(通过读取咖啡脚本documentation ..这是我做过什么:
// file name: phantomTest.js
var phantom = require('phantom');
phantom.create(function(ph) {
ph.createPage(function(page) {
page.open('http://www.google.com', function(status) {
console.log('opened google?', status);
var title = page.evaluate(function() {
return document.title;
});
console.log('page title is ' + title);
});
});
ph.exit();
});
不幸的是它不工作!如果我在shell中运行
node phantomTest.js
,没有任何反应..没有回报和进程不会停止..任何想法?
更新:
我刚才读这在phantomjs faq:
问:为什么不PhantomJS写为Node.js的模块?
答:答案很简单:“一个人不能事奉两个主。”
更长的解释如下。
截至目前,这在技术上非常具有挑战性。
每个Node.js的模块本质上是“从属”到的Node.js, 即,“主”的核心。在目前的状态下,PhantomJS(及其包含的 WebKit)需要完全控制(在同步问题中)所有事件:事件循环,网络堆栈和JavaScript执行。
如果意图只是使用在Node.js中运行的脚本 来使用PhantomJS,那么可以通过启动PhantomJS进程并与其交互来实现这样的“松散绑定”。
嗯..可这有什么关系呢?但那整个图书馆都没有意义!
更新2:
我发现这个代码在做同样的事情的web:
var phantom = require('phantom');
phantom.create(function(ph) {
return ph.createPage(function(page) {
return page.open("http://www.google.com", function(status) {
console.log("opened google? ", status);
return page.evaluate((function() {
return document.title;
}), function(result) {
console.log('Page title is ' + result);
return ph.exit();
});
});
});
});
可惜就是不工作或者..同样的结果!
返回调用一些“愚蠢”,因为你不知道它是如何工作和/或你不能让你的情况是工作很粗鲁。 –
另外,还有比其他Node.js网桥更受推荐的https://github.com/sheebz/phantom-proxy。人们一直在使用Ruby,PHP和Node.js桥接PhantomJS,并取得了不同的成功。 –
对于我强烈的措辞表示歉意,我会从这个问题中提出来。我还会看看'phantom-proxy' ..在这一天结束时,我的目标是让事情有效,它是不要贬低别人的努力。 – abbood