操纵者群集关闭选项卡之前,我无法截屏。
我正在使用具有maxConcurrency 8的puppeteer群集。加载每个页面后,我需要截屏。 20000个网址]。 Page.screenshot对我没有用。我的屏幕截图应包括网址栏和桌面。它基本上就像一个完整的桌面屏幕截图。因此,我使用ImageMagick进行屏幕截图,(使用xvfb进行多屏幕管理)
我正在做的是:加载每个页面时,我调用page.bringToFront并产生一个child_process,该进程使用image magic import命令获取桌面的屏幕截图。
cluster.queue(postUrl.href); //for adding urls to queue
await page.waitForNavigation(); // Wait for page to load before screenshot
//taking screenshot
const { spawnSync} = require('child_process');
const child = spawnSync('import', [ '-window', 'root', path]);
不想在页面加载后设置等待时间,nodejs ImageMagick无效,并且承诺也似乎无效。
我不希望人偶自己关闭标签页。相反,一旦页面加载,它是否可以提供回调事件,等待回调函数执行并返回然后关闭选项卡?
答案 0 :(得分:0)
解决cluster.task
函数的承诺后,页面将关闭:
await cluster.task(async ({ page, data }) => {
// when this function is done, the page will be closed
});
要保持页面打开状态,您可以在结束之前等待另一个Promise:
await cluster.task(async ({ page, data }) => {
// ...
await new Promise(resolve => {
// more code...
// call resolve() when you are done
});
});
最后调用resolve()
函数将解决最后一个Promise,因此也将解决整个async
函数。因此,它将关闭页面。请记住,启动集群时,如有必要,您想将timeout
的值增加到大于30
(默认值)的值:
const cluster = await Cluster.launch({
// ...
timeout: 120000 // 2 minutes
});