我想在我的node.js脚本中使用phantomjs。有一个phantomjs-
node
库。.但是不幸的是,作者使用了这个奇怪的coffee脚本代码来解释他在做什么:
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一起使用,它将看起来像这样:
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编写上面代码的第一段代码(通过阅读coffee脚本文档
..这就是我所做的:
// 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();
});
不幸的是,它不起作用!如果我跑步
node phantomTest.js
在外壳上,什么也没有发生..什么也没有返回,并且过程没有停止..任何想法?
更新:
我只是在phantomjs 常见问题中阅读了这篇文章:
问:为什么PhantomJS没有写为Node.js模块?
答:简短的答案:“没有人可以担任两个主人。”
更长的解释如下。
到目前为止,这样做在技术上非常具有挑战性。
每个Node.js模块本质上都是Node.js核心(即“主”)的“从属”。在当前状态下,PhantomJS(及其随附的WebKit)需要对所有内容(事件循环,网络堆栈和JavaScript执行)具有完全控制权(以同步方式)。
如果目的是直接在Node.js中运行的脚本中使用PhantomJS,则可以通过启动PhantomJS进程并与其进行交互来实现这种“松散绑定”。
嗯..这可能与它有关吗?但是整个图书馆就没有意义了!
更新2:
我在网上找到了执行相同操作的代码:
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();
});
});
});
});
不幸的是,这也不起作用..相同的结果!
phantomjs-
node并不是phantomjs官方支持的npm软件包。相反,它通过创建使用websocket充当节点和幻象之间的IPC通道的Web服务器,在节点和幻象之间实现了“巧妙的桥梁”。我没有弥补:
因此,我们通过分解ExpressJS的实例,在子进程中打开Phantom并将其指向一个特殊的网页(将socket.io消息转换为alert()调用)来与PhantomJS进行通信。Phantom接听了那些alert()呼叫,然后您就可以开始了!
因此,如果phantomjs-node工作正常,不工作,无提示失败或出现异常失败,我不会感到惊讶。除了phantomjs-
node的作者之外,我也不会期望其他任何人能够对phantomjs-node进行故障排除。
原始问题的答案是phantomjs常见问题解答的答案:不。幻影和节点之间存在无法调和的差异。两者都希望完全控制基本的底层功能,例如事件循环,网络堆栈和JS执行,因此它们无法在同一过程中进行协作。
问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装
问题内容: 可以将node.js设置为识别代理(例如Fiddler)并通过代理路由所有ClientRequest吗? 我在Windows上使用节点,并且想要调试http请求,就像在浏览器中使用Fiddler for JavaScript一样。 请注意,我不是在尝试创建代理,也不是在尝试接收服务器收到的代理请求。我想路由通过代理发出的请求。我想像在浏览器中执行请求一样,使用Fiddler来检查请求和
问题内容: 我正在通过GoDaddy设置SSL,以与AWS EC2上的node.js服务器一起使用。我一直无法启动它。 这是我尝试过的: 打算用于域:files.mysite.com 在服务器上,我运行: 然后,我得到CSR:vim files.mysite.csr 我从以下位置复制并粘贴: 最后还有一个空行,我使用rekey离开并粘贴到GoDaddy界面中。 然后,我下载godaddy密钥,该密
我需要一些目前在JavaFX中找不到的功能。比如机器人或托盘图标。 我知道这些工具确实适用于JavaFx应用程序。但是可以使用它们吗?有什么需要我考虑的吗?
在我的Eclipse RCP视图中,我使用JFace数据绑定将模型数据绑定到。我使用绑定数据,如代码片段所示,它工作得很好。 现在我真的想在节点上显示一个图像和文本。如果没有数据绑定,我只需要重写的方法,但是content+label provider方法和不能协同工作。我还没有在API中找到问题的解决方案。是否有一个解决方案,也许使用s?
问题内容: 我查看了Google Cloud SQL的文档和各种搜索,但无法确定是否可以将SQLAlchemy与Google Cloud SQL一起使用,如果可以,则连接URI应该是什么。 我正在寻找使用Flask-SQLAlchemy扩展,并且需要这样的连接字符串: 我看到了Django示例,但看起来配置使用的样式与连接字符串不同。 https://developers.google.com/c