2017-02-20 3 views
0

Я пытаюсь сделать снимок экрана веб-страницы с кодом ниже. С некоторыми небольшими изменениями я могу сохранить скриншот как PNG. Однако, nightmare.JS docs указывает, что метод .screenshot() возвращает «Буфер данных изображения». если опция «путь» не указана.Получение Nightmare.JS (v 2.9.1) буфер скриншота

Как я могу получить доступ к буфере после завершения выполнения скриншота?

const getScreenshot = (url) => { 
    nightmare 
    .goto(url) 
    .wait() 
    .evaluate(() => { 
     const body = document.querySelector('body'); 

     return { 
      height: body.scrollHeight, 
      width: body.scrollWidth 
     }; 
    }) 
    .then(function(dimensions) { 
     return nightmare 
     .viewport(dimensions.width, dimensions.height) 
     .wait(1000) 
     // .screenshot(require('path').join(__dirname, 'screenshot.png')) 
     .screenshot() 
    }) 
    .then(function(e) { 
     console.log('nightmare', nightmare) 
     nightmare.end() 
      .then(function(result) { 
      console.log('completed screenshot', result) 
      console.log('done'); 
     }) 
    }); 
} 

ответ

1

Вы почти есть: в вашем окончательном .then(), e должен быть законченным буфер для PNG. Чтобы проверить, вы можете слегка изменить функцию .then():

function(e) { 
     //this should print "e is a buffer: true" 
     console.log(`e is a buffer: ${Buffer.isBuffer(e)}`); 

     return nightmare.end() 
     .then(function(result) { 
      console.log('completed screenshot', result) 
      console.log('done'); 
     }); 
    } 
+0

Отлично! Спасибо Росс – bresson

+0

Без проблем, рад помочь :) – Ross