使用以下参数运行puppeteer:
const browser = await puppeteer.launch({
args: ["--no-sandbox"],
headless: "false",
devtools: "true",
ignoreDefaultArgs: ["--disable-extensions"],
slowMo: 150,
});
字符串
puppet 师只是跳过这个功能。如果我把断点放在$$eval或evaluate函数上,调试器只会进入一些节点代码,而不会进入我的函数。我做错了什么?
第一个例子不起作用:
const res = await page.evaluate((day) => {
const div = day.querySelector("summary div div div");
debugger;
console.log(div);
}, day);
型
第二个例子也不起作用:
const days = await page.$$eval(
"main div section details",
async (days, getMoonPhase) => {
debugger;
return await Promise.all(
days.map(async (dayEl, dayIndex) => {
// get just moon phase
if (dayIndex === 0) {
const moonPhase = await getMoonPhase(dayIndex);
return { moonPhase };
}
....a lot of other code...
return allInfo;
})
);
},
await getMoonPhase(page)
);
型
1条答案
按热度按时间a1o7rhls1#
据我所知,evaluate方法从Node.js上下文转移到浏览器上下文的函数中获取代码,然后在浏览器上下文中创建并执行一个新函数,因此设置断点对实际函数没有影响。
Puppeteer cannot breakpoint inside page.evaluate or page.$$eval
如果你在浏览器调试器中执行“单步执行下一个函数调用”,它实际上会一个接一个地执行eval中的每一个下一行,所以你可以模拟断点。