1

最終的なURLのスクリーンショットを撮る前に配列に保存されたPuppeteer APIを使用してすべてのドメインリダイレクトを取得しようとしていますが、これまでのコードでは他のリダイレクトもあります。puppeteer api:ドメインリダイレクトのみを取得

たとえば、私が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(); 
})(); 

答えて

0

主応答が最初の応答です。だから、エミッタクラスのonce方法でそれを確認することができます。

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()}`); 
}); 
関連する問題