我的 '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 和图像的渲染解决了问题。如果页面加载太慢,程序必须在进入循环之前链接掉。
我正在创建一个程序来收集我工作的在线大学的论坛回复。我设法成功导航到相应的页面,但是当我尝试包括对已回复的学习者姓名列表的抓取时,我收到 '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 和图像的渲染解决了问题。如果页面加载太慢,程序必须在进入循环之前链接掉。