phantomjs page.evaluate not logging onto console

前端 未结 5 627
梦如初夏
梦如初夏 2020-12-29 20:54

I am a PhantomJs newbie. Just checked a similar post on this site. My question is why \'foo\' is not logged to console or printed?

var page = require(\'webpa         


        
5条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-29 21:25

    The call page.evaluate() runs your evaluated code in a sandbox. The sandbox's console is not the same as PhantomJS's console.

    The following lines added to your script will print your page's console to stderr.

    var system = require('system');
    
    page.onConsoleMessage = function(msg) {
        system.stderr.writeLine('console: ' + msg);
    };
    

    A more complete implementation would be:

    var page = require('webpage').create()
    var system = require('system');
    var foo = 42;
    
    page.onConsoleMessage = function(msg) {
      system.stderr.writeLine( 'console: ' + msg );
    };
    
    function evaluate(page, func) {
      var args = [].slice.call(arguments, 2);
      var fn = "function() { return (" + func.toString() + ").apply(this, " +     JSON.stringify(args) + ");}";
      return page.evaluate(fn);
    }
    
    page.open(
      'http://google.com',
      function() {
        var foo = 42;
        evaluate(
          page,
          function(foo) {
            console.log(foo);
          },
          foo
        );
    
        console.log( "Done" );
    
        phantom.exit( 0 ); // must exit somewhere in the script
      }
    );
    

    Outputs:

    $ phantomjs /tmp/idiot.js 
    console: 42
    Done
    

    By the way, you can call page.open using "about:blank" as your URL if you just want to sandbox test the evaluate function.

提交回复
热议问题