2017-11-10 85 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 }); } –