如何停止Puppeteer中的所有JS脚本

时间:2018-08-17 14:48:30

标签: google-chrome-devtools puppeteer

我希望能够在页面加载后停止任何脚本在puppeteer中运行。这样做的原因是停止轮播图像和延迟加载图像,并实质上使页面具有尽可能静态的行为,以启用图像不变的屏幕截图等。

通过执行page.evaluate('debugger;'),可以暂停整个脚本,但这不能让您继续截屏,因为evaluate函数只有在退出调试器后才能退出(如果gui已启用)

4 个答案:

答案 0 :(得分:3)

更好的解决方案是阻止所有等于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()
})()

来源:Disabling JavaScript Using Puppeteer

答案 1 :(得分:2)

const page = await browser.newPage()
page.setJavaScriptEnabled(false)

答案 2 :(得分:0)

如果您想在页面加载后禁用JavaScript,则可以使用debugger

await page.evaluate( () => { debugger; } );

使用调试器后,我可以拍摄屏幕截图。

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

await page.evaluate( () =>
{
    document.querySelectorAll( '*' ).forEach( element =>
    {
        element.parentNode.replaceChild( element.cloneNode( true ), element );
    });
});

您还可以在类似于上述循环的循环中使用removeEventListener()来删除附加到节点的特定事件。

否则,如果可以在页面加载之前禁用JavaScript,则可以在导航到页面之前使用page.setJavaScriptEnabled()

await page.setJavaScriptEnabled( false );

答案 3 :(得分:0)

给朋友打电话后,这种困扰似乎有效:

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