You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:45:31