使用Playwright截图时页面资源未完全加载的问题求助
解决Playwright截图时图片未完全加载的问题
针对你遇到的截图时图片未加载完全的问题,核心原因是目标站点使用了图片懒加载(仅当图片进入视口才会触发加载),常规的networkidle或固定延迟无法覆盖这类动态加载场景。以下是可行的解决方法:
1. 触发懒加载资源
模拟滚动页面到底部,让所有懒加载图片进入视口,强制触发加载:
await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
2. 等待所有图片加载完成
通过wait_for_function检查页面中所有图片的complete状态,确保每一张图片都已完全加载:
await page.wait_for_function("Array.from(document.images).every(img => img.complete)")
3. 优化页面加载配置
在page.goto时指定等待load状态并延长超时时间,避免因页面加载过慢提前执行截图:
await page.goto(url, wait_until="load", timeout=60000)
完整修改后的代码
import asyncio from playwright.async_api import async_playwright async def take_screenshot(url, filename): async with async_playwright() as p: browser = await p.chromium.launch(headless=True) page = await browser.new_page() # 等待页面完全加载,超时设为60秒 await page.goto(url, wait_until="load", timeout=60000) # 滚动到底部触发懒加载图片 await page.evaluate("window.scrollTo(0, document.body.scrollHeight)") # 等待所有图片加载完成 await page.wait_for_function("Array.from(document.images).every(img => img.complete)") # 截取完整页面 await page.screenshot(path=filename, full_page=True) await browser.close() asyncio.run(take_screenshot("https://meteofrance.com/", "screenshot.png"))
说明:
- 移除了未使用的
sync_playwright导入,简化代码结构。 - 滚动操作确保懒加载图片被触发,后续的图片状态检查保证所有图片都已加载完毕。
- 延长超时时间适配目标站点的加载速度。
内容的提问来源于stack exchange,提问作者deezer tsix
相关产品推荐
相关产品推荐

