Google chrome devtools 如何在Puppeter中停止所有JS脚本

Google chrome devtools 如何在Puppeter中停止所有JS脚本,google-chrome-devtools,puppeteer,Google Chrome Devtools,Puppeteer,我想能够阻止任何脚本能够运行在木偶加载后的页面已经加载。这样做的原因是停止旋转图像和延迟加载图像,本质上使页面尽可能保持静态,以便在图像不变的情况下启用屏幕截图等 通过执行page.evaluate('debugger;')可以暂停整个脚本,但这不允许您继续拍摄屏幕截图,因为aevaluate函数在您退出调试器之前不会退出(如果gui已启用)如果您希望在加载页面后禁用JavaScript,您可以使用: 使用调试器后,我可以截图。 或者,您可以将每个原始节点替换为其克隆,以删除附加到每个元素的事件

我想能够阻止任何脚本能够运行在木偶加载后的页面已经加载。这样做的原因是停止旋转图像和延迟加载图像,本质上使页面尽可能保持静态,以便在图像不变的情况下启用屏幕截图等


通过执行
page.evaluate('debugger;')
可以暂停整个脚本,但这不允许您继续拍摄屏幕截图,因为a
evaluate
函数在您退出调试器之前不会退出(如果gui已启用)

如果您希望在加载页面后禁用JavaScript,您可以使用:

使用调试器后,我可以截图。

或者,您可以将每个原始节点替换为其克隆,以删除附加到每个元素的事件:

await page.evaluate(() => {
  document.querySelectorAll('*').forEach(element => {
    element.parentNode.replaceChild(element.cloneNode(true), element);
  });
});
您还可以在类似于上面的循环中使用来删除附加到节点的特定事件

否则,如果可以在加载页面之前禁用JavaScript,则可以在导航到页面之前使用:

await page.setJavaScriptEnabled(false);

给朋友打电话后,以下几点似乎奏效了:

await page.evaluate('document.body.innerHTML = document.body.innerHTML')

更好的解决方案是阻止所有类型为
script
的请求:

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setRequestInterception(true);

  page.on("request", request => {
    if (request.resourceType() === "script") {
      request.abort()
    } else {
      request.continue()
    }
  })

  await page.goto("https://stackoverflow.com/")
  await browser.close()
})()

来源:

谢谢你的回答。你必须关闭调试器才能截图吗?对我来说,当deugger打开时脚本会暂停,在我关闭它之前不会运行任何其他内容。一旦我关闭调试器,js将再次开始运行。加载后删除
脚本
标记?仍将计算/运行内联脚本这不起作用,因为我们仍然需要脚本最初加载所有图像,然后停止它们运行。虽然此代码段可能是解决方案,确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setRequestInterception(true);

  page.on("request", request => {
    if (request.resourceType() === "script") {
      request.abort()
    } else {
      request.continue()
    }
  })

  await page.goto("https://stackoverflow.com/")
  await browser.close()
})()
const page = await browser.newPage()
page.setJavaScriptEnabled(false)