Кукольник: полный скриншот страницы не работает в режиме headfull - PullRequest
0 голосов
/ 31 марта 2020

Вот мой код. Я использую AdBlock Plus расширение.

У меня есть задача сделать снимок экрана для веб-страницы (используется ленивая загрузка) с изображениями в правой боковой панели под заголовком PAID CONTENT и изображениями внизу под заголовок PAID CONTENT.

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
   const pathToExtension = require('path').join(__dirname, 'abp_chrome');

   const browser = await puppeteer.launch({
     headless: false,
     args: [
      `--disable-extensions-except=${pathToExtension}`,
      `--load-extension=${pathToExtension}`
     ]
   });

  const page = await browser.newPage();
  await timeout(5000);
  await page.setViewport({width: 1200, height: 1200});
  await page.goto('https://edition.cnn.com/2015/07/31/world/mh370-debris- 
  investigation/index.html', {waitUntil: 'load', timeout: 0});
  await page.evaluate(() => {
    window.getDimensions = function(element) { 
     rect = element.getBoundingClientRect();
     return {
      x: rect.x,
      y: rect.y,
      width: rect.width,
      height: rect.height
     };
   };
 });
 await autoScroll(page);  
 await page.screenshot({path: 'example.png', fullPage: true});
 await browser.close();
})();

async function timeout(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function autoScroll(page){
  await page.evaluate(async () => {
  await new Promise((resolve, reject) => {
    var totalHeight = 0;
    var distance = 100;
    var timer = setInterval(() => {
      var scrollHeight = document.body.scrollHeight;
      window.scrollBy(0, distance);
      totalHeight += distance;

      if(totalHeight >= scrollHeight){
         clearInterval(timer);
         resolve();
      }
    }, 500);
  });
 });
}

Я использовал прокрутку для загрузки ленивых изображений, она отлично работает Как я видел в браузере, но на скриншоте не полная страница.

Вот скриншот из кода. enter image description here

Есть ли способ, которым я могу сделать sh это?

1 Ответ

1 голос
/ 04 апреля 2020

У меня была похожая проблема, она была исправлена ​​путем захвата скриншота в режиме без головы.

headless: true

Также настроен пользовательский агент.

page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
WAIT_UNTIL=load")

Я пришел к этому решению, посмотрев на выпуск github .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...