问题 puppeteer/pyppeteer headless 不呈现 SSR 页面

Issue puppeteer/pyppeteer headless doesn't render SSR page

尝试使用 pyppeteer (https://loja.meo.pt/Equipamentos/gaming/Sony/PS5-Digital-Comando-DS-Plus-Card-365-dias?cor=Branco&modo-compra=PromptPayment) 抓取页面 - 屏幕截图有效,我看到同意 cookie 的模式,但背景只是纯白色。我评估了 javascript 以接受 cookie,我又拍了一张截图,模态消失了,但页面仍然是白色的(甚至 post-重新加载)不知道为什么这不起作用,它与 puppeteer 一起工作nodejs(使用免费的开源 streetmerchant)所以一定是别的东西..?

 url = "https://loja.meo.pt/Equipamentos/gaming/Sony/PS5-Digital-Comando-DS-Plus-Card-365-dias?cor=Branco&modo-compra=PromptPayment"

 browser = await launch(
        ignoreHTTPSErrors=True,
        headless=True,
        executablePath=os.getenv('CHROME_PATH'),
        args=[
          '--no-sandbox',
          '--disable-setuid-sandbox',
          '--disable-dev-shm-usage',
          '--headless',
          '--disable-gpu',
          '--ignore-certificate-errors'
        ]
)
page = await browser.newPage()

await page.setViewport({'width': 1920, 'height': 1280})

await page.goto(url, {'waitUntil': 'networkidle0'})

await page.screenshot({'path': 'screenshot.png'})

一些帮助会很棒!

感觉 React 应用程序没有启动。非常欢迎任何帮助!

解决方案

脚本运行良好,一切正常。问题出在 docker 和卷上,有几个实例 运行 相同的脚本并且它使用旧的屏幕截图/旧脚本 - 必须删除所有它们并重新启动脚本并且它在第一次尝试时工作.

因为每个 puppeteer 版本都有一个完全兼容的 chromium 版本列表,这可能是您遇到问题的原因。

它对我来说和你分享的脚本一样有效,只是使用了 puppeteer 附带的默认铬。

from pyppeteer import launch
import asyncio

url = "https://loja.meo.pt/Equipamentos/gaming/Sony/PS5-Digital-Comando-DS-Plus-Card-365-dias?cor=Branco&modo-compra=PromptPayment"

async def main():
    browser = await launch(
            ignoreHTTPSErrors=True,
            headless=True,
            # executablePath=os.getenv('CHROME_PATH'),
            args=[
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-dev-shm-usage',
            '--headless',
            '--disable-gpu',
            '--ignore-certificate-errors'
            ]
    )
    page = await browser.newPage()

    await page.setViewport({'width': 1920, 'height': 1280})

    await page.goto(url, {'waitUntil': 'networkidle0'})

    await page.screenshot({'path': 'screenshot.png'})

if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(main())

我使用的是 python 3.8.5,这些是依赖版本:

asyncio==3.4.3 
pyppeteer==0.2.5