page.set('content') doesn't work with dynamic content in phantomjs

后端 未结 3 482
闹比i
闹比i 2021-01-22 11:28

I tried to use phantomjs for screen capturing my page with node-phantom bridge. Here is what I\'m trying:

 var phantom = require(\'node-phantom\');

 phantom.cre         


        
相关标签:
3条回答
  • 2021-01-22 12:15

    I am not sure why set content does not work, It seems to be a limitation of the phantomjs api. You can just use document.write.

    var phantom = require('node-phantom');
    
    phantom.create(function (err, ph) {
      return ph.createPage(function (err, page) {
        page.open("about:blank", function(err,status) {
          page.evaluate(function() {        
            document.write('<html><body><script>document.write("<h1>Hello From JS</h1>");</script><p>Hello from html</p></body></html>');
          });
          return page.render('./content.png', function (err) {
            ph.exit();
          });
        });
      });         
    });
    
    0 讨论(0)
  • 2021-01-22 12:26

    JavaScript code needs some time to execute. Try to have a delay between setting the page content and calling render.

    0 讨论(0)
  • 2021-01-22 12:31

    as ariya mentioned, time is needed. there is likely an 'onLoadFinished' event for this library (there is for the node lib i use). you can handle this without an arbitrary wait time by seeing my example at the bottom of this github issue: https://github.com/amir20/phantomjs-node/issues/68

    Document.prototype.captureScreenshot = function(next) {
    console.log(">> Rendering screencap for " + this.id)
    var self = this;
    phantom.create(function(ph) {
        ph.createPage(function(page) {
            page.setContent(self.html);
            page.set("viewportSize", {
                width: 1920,
                height: 1080
            });
            page.set('onLoadFinished', function(success) {
                var outputFile = './screenshots/screenshot-' + self.id + '.png';
                page.render(outputFile);
                ph.exit();
                console.log(">> Render complete for " + self.id)
                if (next)
                    next(outputFile);
            })
        });
    });
    

    }

    0 讨论(0)
提交回复
热议问题