我正在尝试按照一些教程,一个简单的控制台日志来获取页面的标题,但是返回undefined,任何想法为什么会发生这种情况?
var phantom = Meteor.npmRequire('phantom');
phantom.create(function(ph){
ph.createPage(function(page){
page.open('http://m.bing.com', function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log(title);
ph.exit();
});
});
});
答案 0 :(得分:1)
看起来您正在使用PhantomJS和节点之间的phantomjs-node网桥。它的API与PhantomJS的不同之处在于,您调用/设置的每个函数或属性都会进行回调,结果准备就绪时page.evaluate
也是如此。
GitHub上的README中的示例直接显示了您想要的代码:
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://www.google.com", function (status) {
console.log("opened google? ", status);
page.evaluate(function () { return document.title; }, function (result) {
console.log('Page title is ' + result);
ph.exit();
});
});
});
});
答案 1 :(得分:0)
那是因为page.evaluate是异步的。也许尝试将其包装在Future
- ized函数
var title = (function(page) {
// not sure about Meteor.npmRequire... so I'm using Npm.require instead
var Future = Npm.require('fibers/future');
var future = new Future();
page.evaluate(function() {
future.return(document.title);
});
return future.wait();
})(page);
console.log(title);