小编Sud*_*Sur的帖子

Puppeteer 不会返回来自特定网站的所有请求

我有以下代码,可以从特定网站提取所有请求(获取所有图像、CSS、脚本、字体...)

var totalRequests = 0;

    puppeteer.launch().then(async browser => {
        const page = await browser.newPage();
        await page.setRequestInterception(true);
        page.on('request', interceptedRequest => {
            interceptedRequest.continue();
        });
        page.on('response', response => {
            totalRequests = totalRequests + 1;
            console.log('Url: ' + response.url());
        });
        await page.goto('https://stackoverflow.com');
        await browser.close().then(() => {
            res.send('Requests: ' + totalRequests);
        });
Run Code Online (Sandbox Code Playgroud)

太好了,在控制台中我可以看到来自stackoverflow.com的所有 Url (Css 文件、图像文件、字体文件和 Javascript 文件)以及请求的总文件(在本例中我看到 31 个请求),但由于某种原因我结束了请注意,此代码不会返回所有页面请求。

如果我们转到 Google Chrome,按 F12,转到网络部分并重新加载页面(假设您位于 URL https://stackoverflow.com),我们将看到总共 39-40 个请求文件。

问题是我的代码只返回 30 到 31 个请求,并且在控制台中我看不到 Chrome 上显示的所有链接。可能会发生什么?我该怎么做才能返回所有请求,如 Google Chrome 所示?

node.js puppeteer

4
推荐指数
1
解决办法
4368
查看次数

导航超时后关闭浏览器

我用nodejs + puppeteer 编写了下面的代码,其目标是截取用户网站的屏幕截图:

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://MY_WEBSITE/try/slowURL',{timeout: 30000, waitUntil: 'networkidle0' });//timeout 30 seconds
await page.setViewport({width: 1920, height: 1080});
await page.screenshot({path: pathUpload});
await browser.close();
Run Code Online (Sandbox Code Playgroud)

它的操作非常简单,但为了测试超时,我创建了一个http://MY_WEBSITE/try/slowURL需要 200 秒加载的页面 ( )。

根据 puppeteer 超时 ( timeout: 30000),有 100% 的机会发生“导航超时超出:超过 30000 毫秒”错误,尤其是因为我强制执行它。

问题

通过htop命令(linux中使用),即使系统崩溃并显示“TimeoutError”后,我也可以看到浏览器并未关闭。

如果浏览器在扫描完成后没有关闭,那么服务器很可能会耗尽内存,而我不希望这样。

我怎么解决这个问题?

node.js puppeteer

4
推荐指数
1
解决办法
1680
查看次数

如何使用 Puppeteer 计算页面完全加载?

我正在尝试使用 Node 中的 puppeteer 以秒为单位使页面完全加载时间,为此我对 API 和其他问题进行了一些研究并创建了以下代码:

/* First Configuration */
    puppeteer.launch({
            defaultViewport: { width: 1600, height: 800 }
      }).then(async browser => {
        const page = await browser.newPage();
    await page.setCacheEnabled(false);
        await page.goto('https://stackoverflow.com', {waitUntil: 'networkidle0'});

        /* Get Page Metrics */

        const perf = await page.metrics();
        console.log(JSON.stringify(perf));

        /* Get Page Evaluate */

        const timing = await page.evaluate(() => {
            const result = {};
            for (const key of Object.keys(window.performance.timing.__proto__))
                result[key] = window.performance.timing[key];
            return result;
        });
        console.log(JSON.stringify(timing));

        /* Show Results on Browser Close */ …
Run Code Online (Sandbox Code Playgroud)

node.js puppeteer

3
推荐指数
1
解决办法
1122
查看次数

标签 统计

node.js ×3

puppeteer ×3