问题 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
尝试使用 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