我的 'Execution Context Destroyed' 错误的来源是什么?

What is the source of my 'Execution Context Destroyed' error?

我正在创建一个程序来收集我工作的在线大学的论坛回复。我设法成功导航到相应的页面,但是当我尝试包括对已回复的学习者姓名列表的抓取时,我收到 'Execution context was destroyed error'.

到目前为止,我尝试在 page.waitFor() 方法中移动不同的超时时间。

   const nameLinkList = await page.$$eval(
            '.coursename',
            (courseLinks => courseLinks.map(link => {
                const a = link.querySelector('.coursename > a');
                return {
                    name: a.innerText,
                    link: a.href
                };
            }))
        );

        for (const {
                name,
                link
            } of nameLinkList) {
            await Promise.all([
                page.waitForNavigation(),
                page.goto(link),
                page.waitFor(2000),
            ]);

            let [button] = await page.$x("//a[contains(., 'Self')]");
            if (button) {
                await button.click();
            } else {
                console.log(name);
                console.log('Didnt find link');
            }

            fs.appendFile('out.csv', name + '\n');
            await page.waitFor(1000);
            var elementExists = await page.$$('.author .media-body');

            if (elementExists) {
                await console.log(name);
                await page.waitFor(500);
                for (let z of elementExists) {
                    const studentName = await z.$eval('a', a => a.innerText);
                    await page.waitFor(2000)
                    await console.log(studentName);
                }
            }
            await page.goto('www.urlwiththelistofcourses.com');

        }

我希望它遍历每个页面,首先记录课程的名称,然后是在课程特定论坛上发帖的所有学生的姓名。让我感到困惑的是,与以前的错误不同,它卡在特定的迭代中,这个错误是可变的,通常在同一区域,大约在第 12-17 次迭代,有时甚至更早。

这里好像是调整waitFor的组合:

 fs.appendFile('out.csv', name + '\n');
            await page.waitFor(1000);
            var elementExists = await page.$$('.author .media-body');

到 2000,结合禁用 css 和图像的渲染解决了问题。如果页面加载太慢,程序必须在进入循环之前链接掉。