«Ошибка: ошибка оценки: объект» и «Ошибка: ошибка протокола (Network.getResponseBody): содержимое запроса было удалено из кэша инспектора» - PullRequest
1 голос
/ 03 июня 2019
  • Я пытаюсь загрузить .ts файлы разных видео с помощью Puppeteer.
  • Я делаю это, отслеживая все запросы .ts (которые я вызываю сам), а затем сохраняя / добавляя всеих ответы.
  • Однако иногда UnhandledPromiseRejectionWarning: Error: Evaluation failed: Object происходит, что указывает на page.evaluate, откуда никуда.Хотя я подозреваю, что это в основном происходит, когда обрабатывается множество файлов .ts.
  • Кроме того, аналогично, когда существует большой файл с большим количеством файлов .ts, возникает UnhandledPromiseRejectionWarning: Error: Protocol error (Network.getResponseBody): Request content was evicted from inspector cache.

Любые предложения о том, как я мог -

  1. Решить проблему page.evaluate.

  2. Очистить инспекторакэшируйте, когда я закончу с конкретными запросами / данными, и заставьте Puppeteer сохранить большое количество файлов .ts.

/* This whole code is inside an async function */

/*    .... code for finding array ts ....      */

let requests = [], prs = [];

page.on('request', req => {
    if(req.url().endsWith('.ts')){
        requests.push(req);
    }
});

/* 
    ts[i].ts contains all the links to a stream/video's .ts files
    ts[i].filename contains the name of that video
*/

for (i = 0; i < ts.length; i++) {
    for(const ele of ts[i].ts){ 
        // Not writing await is on purpose; for saving all the pending promises
        let x = page.evaluate(async (link, file) => {

            // jQuery is included in the page itself
            return $.ajax({
                url : link,
                headers : {"custom" : file}
            });
        }, ele, ts[i].filename);

        prs.push(x);
    }

    // This makes request.response() be filled
    await Promise.all(prs);

    for(let req of requests){
        let res = await req.response().buffer();
        let fname = req.headers().customHeader;

        // Data written to relevant file
        fs.appendFileSync(fname, res);  
    }

    prs = [];
    requests = [];
}

1 Ответ

0 голосов
/ 03 июня 2019

Существует проблема с ошибкой кэша в репо кукловода: # 1599

Существует ограничение на размер содержимого ресурса, который devtools хранит в памяти. Ресурс составляет 10 МБ, а для хранения всех ресурсов существует ограничение в 100 МБ

В протоколе есть экспериментальная поддержка для изменения этих ограничений: Network.enable .

И Вот как попытаться включить работу с большими файлами:

await page._client.send('Network.enable', {
  maxResourceBufferSize: 1024 * 1204 * 100,
  maxTotalBufferSize: 1024 * 1204 * 200,
})

Может быть, это поможет в вашем случае.

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