Отключить загрузки в Puppeteer - PullRequest
0 голосов
/ 15 февраля 2019

Можно ли отключить загрузку для определенного типа MIME.Например, переход по URL-адресу, по умолчанию загружающему zip-архив, ничего не должен делать.

Редактировать:

Я не знаю заранее, какой URL будет посещен и что вернет этот URL.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Решение, которое сработало для меня:

const client = await page.target().createCDPSession();

// intercept request when response headers was received
await client.send('Network.setRequestInterception', {
  patterns: [{
      urlPattern: '*',
      resourceType: 'Document',
      interceptionStage: 'HeadersReceived'
  }],
});

await client.on('Network.requestIntercepted', async e => {
    let headers = e.responseHeaders || {};
    let contentType = headers['content-type'] || headers['Content-Type'] || '';
    let obj = {interceptionId: e.interceptionId};
    if (contentType.indexOf('application/zip') > -1) {
        obj['errorReason'] = 'BlockedByClient';
    }

    await client.send('Network.continueInterceptedRequest', obj);
});

Этот фрагмент кода блокирует навигацию по URL-адресу, который загрузит zip-архив и передаст остальные запросы.

Благодаря @hardkodedза предложение посетить github.com / GoogleChrome / puppeteer / Issues / 1191 .

0 голосов
/ 15 февраля 2019

Если это запрос, сгенерированный страницей, вы можете просто остановить запрос, используя setRequestIntercept

await page.setRequestInterception(true);
page.on('request', request => {
    if (request.url().endsWith('.zip'))
        request.abort();
    else
      request.continue();
});

Это перехват запроса.Это означает, что вы сможете сделать вывод, что вы загрузите файл до того, как будет сделан запрос.Перехват ответа еще не реализован.Поэтому я думаю, что это лучшее, что вы можете получить сейчас.

...