我正在创建一个程序,以检索针对我工作的在线Uni的论坛回复。我设法成功导航到适当的页面,但是当我尝试将抓取包含在已答复的学习者的姓名列表中时,我收到“执行上下文被破坏的错误”。
到目前为止,我尝试遍历具有不同超时量的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次迭代中的同一区域,有时甚至更早。
答案 0 :(得分:0)
似乎在这里调整了waitFor的组合:
fs.appendFile('out.csv', name + '\n');
await page.waitFor(1000);
var elementExists = await page.$$('.author .media-body');
到2000年,结合禁用css和图像的渲染解决了该问题。如果页面加载速度太慢,则该程序必须已链接掉才能进入循环。