我希望能够在页面加载后停止任何脚本在puppeteer中运行。这样做的原因是停止轮播图像和延迟加载图像,并实质上使页面具有尽可能静态的行为,以启用图像不变的屏幕截图等。
通过执行page.evaluate('debugger;')
,可以暂停整个脚本,但这不能让您继续截屏,因为evaluate
函数只有在退出调试器后才能退出(如果gui已启用)
答案 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()
})()
答案 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')