javascript - puppeteer 师API : only get domain redirects

标签 javascript node.js headless-browser puppeteer google-chrome-headless

我正在尝试使用 Puppeteer api 获取所有域重定向,在截取最终 URL 的屏幕截图之前将其保存到数组中,但到目前为止我拥有的代码还获取其他重定向。

例如,如果我转到 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();
})();

最佳答案

主要响应是第一个响应。所以你可以用 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()}`);
});

关于javascript - puppeteer 师API : only get domain redirects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693665/

相关文章:

javascript - 从 map 中减去特定的最后一个单词

javascript - exec() 命令未在标准输出中显示输出

ajax - CasperJS 无法抓取 AJAX 网页

javascript - 维护JS调试代码并重新加载浏览器

javascript - 在tensorflow JavaScript中使用posenet时出现内存泄漏

javascript - AngularJS 试图获取图像 Json 文件并渲染模板时出现问题

node.js - 将图像文件上传到 s3 存储桶效果不佳。怎么修?

node.js - 我可以在浏览器中启动 socket.io/websocket 服务器吗?

javascript - 使用 Phantom.js 的 Headless Browserify JavaScript 测试

selenium - 使用或不使用 headless 浏览器运行 Karma 和 Protractor 测试