Прокрутка страницы в PhantomJS - PullRequest
0 голосов
/ 28 сентября 2018

Я использую PhantomJS и ffmpeg для рендеринга видео с кадров.Я пытаюсь делать кадры прокрутки и рендеринга, но ничего не получается.Мой код:

  const page = require("webpage").create();

  const getImage = (link, duration) => {
  page.viewportSize = { width: windowWidth, height: windowHeight };
  page.scrollPosition = {top: 0, left: 0};
  let videoDuration = Math.floor(duration * 25);

  if (link.startsWith("http://") || link.startsWith("https://")) {
    page.open(link, () => {
      let frame = 0;
      setInterval(() => {
        page.render("frames/image" + frame++ + ".png", { format: "png" 
  });
        page.evaluate(function () { window.scrollBy = 100; });
        if (frame > videoDuration) {
          phantom.exit();
        }
      }, 25);
    });
  } else {
    console.log("Enter a valid link");
    phantom.exit();
  }
};

getImage(imageLink, duration);

Когда я запускаю отрендеренное видео, оно воспроизводится только как любое видео и не имеет прокрутки.Что я делаю не так?PS: я нашел несколько решений с page.scroolPosition, но они тоже не работают.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Как я могу проанализировать, для этого сайта "jet.gml.aisnovations.com/" я не могу создать видео рендеринг, НО ... но я сделал это для https://ru.wikipedia.org

Воткод:

  const imageLink = "https://ru.wikipedia.org";
  const duration = 10; 

  const page = require("webpage").create();

  const saveImages = (link, duration) => {
  const width = 1024;
  const height = 768;
  page.viewportSize = { width, height };

  let videoDuration = Math.floor(duration * 25);

  if (
    link.startsWith("http://") ||
    link.startsWith("https://")
  ) {
    page.open(link, () => {
      const scrollHeight = page.evaluate(() => {
        return document.body.scrollHeight;
      });

      const scrollStep = (scrollHeight - height) / videoDuration;

      for (let i = 0; i < videoDuration; i += 1) {

        page.clipRect = {
          width,
          height,
          left: 0,
          top: scrollStep * i
        };

        page.render("frames/image" + (i + 1) + ".png", { format: "png" });
      }

      phantom.exit();
    });
  } else {
    console.log("Enter a valid link");
    phantom.exit();
  }
};

saveImages(imageLink, duration);

Скрипт сохранения изображений в папках кадров, а затем рендеринг из них видеоклипа с командой

`ffmpeg -start_number 10 -i frames/image%02d.png -c:v libx264 -r 25 -pix_fmt yuv420p out.mp4`
0 голосов
/ 28 сентября 2018

Попробуйте подождать после открытия страницы с другими таймаутами.

const page = require("webpage").create();

const getImage = (link, duration) => {
    page.viewportSize = { width: windowWidth, height: windowHeight };
    page.scrollPosition = { top: 0, left: 0 };
    let videoDuration = Math.floor(duration * 25);

    if (link.startsWith("http://") || link.startsWith("https://")) {
        page.open(link, () => {
            let frame = 0;

            setTimeout(() => {
                setInterval(() => {
                    page.render("frames/image" + frame++ + ".png", {
                        format: "png"
                    });
                    page.evaluate(function () { window.scrollBy(0, 100); });
                    if (frame > videoDuration) {
                        phantom.exit();
                    }
                }, 25);
            }, 1000);
        });
    } else {
        console.log("Enter a valid link");
        phantom.exit();
    }
};

getImage(imageLink, duration);

Попробуйте также использовать другие методы прокрутки: window.scrollTo(...), document.body.scrollTop = ...

ОБНОВЛЕНИЕ:

window.scrollBy(X, Y); - это функция, а не свойство.

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