首页 > 解决方案 > 几次迭代后异步 puppeteer 浏览器断开连接

问题描述

我在一个小案例中使用 puppeteer 测试了迭代。我已经阅读了 puppeteer 断开连接的常见原因是Node 脚本不等待 puppeteer 操作结束。因此,我将代码段中的所有函数都转换为异步函数,但没有帮助。

如果具有六次迭代的小案例工作,我将在我当前的项目中实现它,大约 50 次迭代。

'use strict';

const puppeteer = require('puppeteer');

const arrIDs = [8322072, 1016816, 9312604, 1727088, 9312599, 8477729];

const call = async () => {
    await puppeteer.launch().then(async (browser) => {
        arrIDs.forEach(async (id, index, arr) => {
            await browser.newPage().then(async (page) => {
                await page.goto(`http://somelink.com/${id}`).then(async () => {
                    await page.$eval('div.info > table > tbody', async (heading) => {
                        return heading.innerText;
                    }).then(async (result) => {
                        await browser.close();
                        console.log(result);
                    });
                });
            });
        });
    });
};

call();

标签: javascriptnode.jspuppeteer

解决方案


forEach同步执行。forEach用一个简单的 for 循环替换。

const arrIDs = [8322072, 1016816, 9312604, 1727088, 9312599, 8477729];
const page = await browser.newPage();

for (let id of arrIDs){
    await page.goto(`http://somelink.com/${id}`);
    let result = await page.$eval('div.info > table > tbody', heading => heading.innerText).catch(e => void e);
    console.log(result);
}

await browser.close()

推荐阅读