2017-11-10 152 views
0

我有一个服务nodejs在Ubuntu上工作,使用puppeteer截取页面截图,但在某些页面中,方法page.screenshot({fullPage: true, type: 'jpeg'})不适用于某些随机URL,并且日志中不显示任何错误。该代码是:Puppeteer截图在随机的URL中停止

async takeScreenshot() { 
     console.log('trying take Screenshot [...]'); 
     let image = await this.page.screenshot({fullPage: true, type: 'jpeg'}); 
     console.log('Completed!'); 
     return image; 
    } 

,我有这个问题页的一个例子是:https://nuevo.jumbo.cl/mayonesa-hellmanns-751-g-supreme-light/p

+1

它怎么不为你工作? – tony19

回答

0

你没有解释它是如何没有工作,或者你如何预期它来显示,但我假设它捕获了像下面的图像。

enter image description here

当你第一次加载页面时,它会加载这样的事情,因为你没有告诉代码等待一定量时,如果你这样做这是不相关的操纵木偶,我没有在任何地方看到它。

对我来说,只是正常的截图工作,区域设置除外。我使用的版本0.13和下面的代码,

await page.goto("https://nuevo.jumbo.cl/mayonesa-hellmanns-751-g-supreme-light/p", {waitUntil: "networkidle0"}); 
    await page.screenshot({ 
     path: "test_google.png", 
     fullPage: true 
    }); 
}); 
+0

在此代码示例之前,我使用JS设置区域cookie。所以我不打开这个页面。 –

+0

尽管如此,你还是没有分享更多的代码(比如你说你在JS上使用过cookies),或者你没有分享实际的问题,或者你所期望的。 –

0

看起来你不等待,直到页面完全加载之前,你截屏。你需要“最好推迟”:

const page = await browser.newPage(); 
    await page.goto(inputImgUrl, {waitUntil: 'networkidle'}); 

所以整个事情看起来应该是这样的:

(async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto(inputImgUrl, {waitUntil: 'networkidle'}); 
    await page.setViewport(viewPortData); 
    await page.screenshot({path: outputFile, type: 'jpeg', quality: 50, clip: cropData}); 

    await browser.close(); 
})(); 
+0

这是我的代码,转到页面:async navigateTo(url){ if(!url) throw new Error('Missing URL'); return await this.page.goto(url,{ waitUntil:'networkidle', networkIdleTimeout:3000, timeout:60000 }); } –