Evaluate in PhantomJS doesn't seem to work

2020-04-11 10:26发布

问题:

I have a problem with JavaScript magic. When I execute this code:

var page = require('webpage').create();
var url="http://google.com";
page.open(url, function (status){
  if (status!== "success") {
    console.log("Fail to load: "+url)
  }else{
    console.log('1');
    page.evaluate(function() {
      console.log('2');
      });   
    console.log('3');
  }
phantom.exit();
});

console have only 1 and 3 and no 2. Can anyone say why?

If I paste after my code DOM manipulation example (but it never execute) I have my two. Did I forget something important?

回答1:

PhantomJS won't log console messages in .evaluate() statements by default. Just include

page.onConsoleMessage = function (msg) {
    console.log(msg);
};

See this page for more details/in-depth example:

http://code.google.com/p/phantomjs/wiki/QuickStart#Code_Evaluation



回答2:

From Google Code

Any console message from a web page, including from the code inside evaluate(), will not be displayed by default. To override this behavior, use the onConsoleMessage callback.



回答3:

If you only want select logs to come through, you can return the value that you'd like to print.

For example:

console.log(page.evaluate(function() {
    return '2';
});