无法评估phantomjs中的jquery函数

时间:2016-01-05 07:53:41

标签: jquery phantomjs

我想构建一个phantomjs代理服务,它嵌入了jquery并接受url和javascript代码。

我写了一个很好的例子:

var webPage = require('webpage');
var page = webPage.create();

page.onInitialized = function() {
    page.injectJs('js_lib/jquery.min.js');
    // page.includeJs('http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js');
    console.log('running document-start script.');
};

page.open("http://example.com", function(status) {
    if ( status === "success" ) {
        // var title = page.evaluateJavaScript('$(title).text()');
        var title = page.evaluate(function() {
            return $("title").text();
        });
        console.log(title);
    }
    phantom.exit();
});

为达到我的目的,需要使用page.evaluateJavaScript('$("title").text()'); 因为我想将{'url':somesite.com, 'js':'$("title").text()'}传递给此服务。

然后我将代码切换到page.evaluateJavaScript

page.open("http://example.com", function(status) {
    if ( status === "success" ) {
        var title = page.evaluateJavaScript('$("title").text()');
        console.log(title);
    }
    phantom.exit();
});

得到:

$ phantomjs test.js
running document-start script.
ReferenceError: Can't find variable: title

  phantomjs://webpage.evaluate():1 in global code
  :0 in evaluateJavaScript
  test.js:20
  :285 in _onPageOpenFinished
null

1 个答案:

答案 0 :(得分:1)

我解决了!

不要写为page.evaluateJavaScript('$(title).text()');

需要使用function {}来包装代码。

var webPage = require('webpage');
var page = webPage.create();

page.onInitialized = function() {
    page.injectJs('js_lib/jquery.min.js');
    // page.includeJs('http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js');
    console.log('running document-start script.');
};


page.open("http://example.com", function(status) {
    if ( status === "success" ) {
        var title = page.evaluateJavaScript('function() { return $("title").text();}');
        console.log(title);
    }
    phantom.exit();
});