как остановить запись кукловода - PullRequest
0 голосов
/ 29 мая 2019

я использую puppeteer-recorder для записи видео с активности браузера

этот пакет https://www.npmjs.com/package/puppeteer-recorder

вот мой код

async function check_login()
{

    try {



        const page = await global_browser.newPage();
        await page.setViewport({width: 1000, height: 1100});

        record({
            browser: global_browser, // Optional: a puppeteer Browser instance,
            page: page, // Optional: a puppeteer Page instance,
            output: path + 'output.webm',
            fps: 60,
            frames: 60 * 5, // 5 seconds at 60 fps
            prepare: function () {}, // <-- add this line
            render: function () {} // <-- add this line

        });

        await page.goto('http://localhost/home_robot/mock.php', {timeout: 60000})
            .catch(function (error) {
                throw new Error('TimeoutBrows');
            });


        await page.close();



    }
    catch (e) {
        console.log(' LOGIN ERROR ---------------------');
        console.log(e);
    }
}

работает нормально, но я не знаю, как остановить запись, и поэтому, когда я добираюсь до конца функции, я получаю эту ошибку

(node:10000) UnhandledPromiseRejectionWarning: Error: Protocol error (Emulation.setDefaultBackgroundColorOverride): Target closed.
    at Promise (C:\wamp64\www\home_robot\node_modules\puppeteer\lib\Connection.js:202:56)
    at new Promise (<anonymous>)
    at CDPSession.send (C:\wamp64\www\home_robot\node_modules\puppeteer\lib\Connection.js:201:12)
    at Page._screenshotTask (C:\wamp64\www\home_robot\node_modules\puppeteer\lib\Page.js:806:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:10000) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (
rejection id: 1)
(node:10000) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

и я не получаю видеофайл, я предполагаю, что он есть, потому что я закрываю страницу, не останавливая запись

к сожалению, нет документации, и автор не отвечает на вопросы

1 Ответ

1 голос
/ 30 мая 2019

Нет возможности или нет необходимости останавливать запись с помощью этого модуля, посмотрите внимательно на параметр frames метода record:

frames: 60 * 5, // 5 seconds at 60 fps

После получения 300 кадровэто остановится само собой.

Однако для его работы должно быть выполнено очень важное требование, и документация не упомянет его, но вы можете увидеть его в источнике модуля: он использует ffmpeg для создания видео со скриншотов И чтодолжен быть в PATH.Если нет, вы должны указать двоичное местоположение ffmpeg в опциях:

const puppeteer = require('puppeteer');
const { record } = require('puppeteer-recorder');

puppeteer.launch({headless : false}).then(async browser => {
    const page = await browser.newPage();

    await page.goto('https://codepen.io/hexagoncircle/full/joqYEj', {waitUntil : 'networkidle2'});

    await record({
        ffmpeg: "c:\\ffmpeg\\bin\\ffmpeg.exe" // <-- provide full path to ffmpeg binary
        browser: browser, // Optional: a puppeteer Browser instance,
        page: page, // Optional: a puppeteer Page instance,
        output: 'output.webm',
        fps: 24,
        frames: 24, // desired seconds of recording multiplied by fps
        prepare: function (browser, page) { /* you could click on a button */ },
        render: function (browser, page, frame) { /* executed before each capture */ }
    });    

    await browser.close();
});

Результат:

result of recording

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