debugging 调试器不会在evaluate或$$eval内的断点处停止(操纵者调试)

bkhjykvo  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(138)

使用以下参数运行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)
);

a1o7rhls

a1o7rhls1#

据我所知,evaluate方法从Node.js上下文转移到浏览器上下文的函数中获取代码,然后在浏览器上下文中创建并执行一个新函数,因此设置断点对实际函数没有影响。
Puppeteer cannot breakpoint inside page.evaluate or page.$$eval
如果你在浏览器调试器中执行“单步执行下一个函数调用”,它实际上会一个接一个地执行eval中的每一个下一行,所以你可以模拟断点。

相关问题