puppeteer api: получать только перенаправления домена

Я пытаюсь получить все перенаправления домена с помощью api Puppeteer, сохраненные в массиве, прежде чем делать снимок экрана с конечным URL-адресом, но код, который у меня есть, также получает другие перенаправления.

Например, если я goto youtube.com, тогда мой код будет правильно получать перенаправления 'https://youtube.com/', 'https://www.youtube.com/',, но он также получит другие перенаправления, такие как doubleclick.net.

Я хочу получить только перенаправления, которые будут происходить в строке URL.

Мне удалось сузить круг с помощью request.resourceType === 'document'. Как я могу сузить круг вопросов?

Вот код:

// node chrome.js http://youtube.com

const puppeteer = require('puppeteer');
var url = process.argv[2];

(async () => {

    const browser = await puppeteer.launch({headless: true, timeout: 30000, ignoreHTTPSErrors: true});
    const page = await browser.newPage();
 // await page.setRequestInterception(true); // hangs with resourcetype

    const urls = [];

    page.on('request', request => {
      // if (request.resourceType === 'document' || request.resourceType === 'script') {
      if (request.resourceType === 'document') { 
      urls.push(request.url);
      request.continue();
      }
    });

    await page.goto(url, {timeout: 20000, waitUntil: 'load'}); //default load

    await page.screenshot({path: 'test.jpg', type: 'jpeg', quality: 80, fullPage: false});
    console.log(urls);

    await browser.close();
})();

person turrican_34    schedule 07.12.2017    source источник


Ответы (1)


Главный ответ - это первый ответ. Поэтому вы можете проверить это с помощью метода Once класса Emitter:

page.once('response', function(response) {
    console.log(`${response.status()} ${response.url()}`); 
});
// page.goto(...);

если вам нужен список всех перенаправлений, вы можете:

let responses = [];
const _parseMainResponses = function(response) {
    if(response.status() >= 300 && response.status() <= 399) {
        responses.push(response);
    }else {
        responses.push(response);
        // get a non redirect. We can now remove the listener
        page.removeListener('response', _parseMainResponses);
    }
};


// page.goto(...)

responses.map(function(response) {
    console.log(`${response.status()} -> ${response.url()}`);
});
person Luca Rainone    schedule 16.02.2018