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

Python中如何使用Selenium在页面加载完成后的实际时刻截图

问题根因

当前代码的截图触发时机仅对应DOM初始加载完成节点,不会等待页面内异步JS渲染、接口请求、图片/字体等动态资源加载完毕,因此只能捕获页面加载阶段的内容。此外现有代码存在3处兼容问题:

  • 新版Selenium已废弃find_element_by_*系列方法,直接运行会抛出属性错误
  • Headless无界面模式下maximize_window()方法不生效,你将窗口尺寸计算逻辑放在资源渲染完成前执行,拿到的宽高是未渲染完成的错误值
  • pyautogui.screenshot()依赖系统图形桌面环境,在headless模式下无法捕获浏览器渲染内容,属于无效代码
修复方案

基础修复:等待页面加载完成后再执行截图

先通过JS判断页面加载状态,再通过显式等待确认核心元素渲染完成,最后再计算窗口尺寸、触发截图,可直接运行的修正代码如下:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.headless = True
# 添加启动参数避免headless模式下的渲染异常
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

driver.get("http://127.0.0.1:8050/")
# 第一步:等待页面load事件触发完成,所有静态资源加载完毕
WebDriverWait(driver, 10).until(
    lambda d: d.execute_script("return document.readyState") == "complete"
)
# 第二步:等待页面核心渲染节点可见,替换下面的选择器为你页面中最后加载完成的业务元素即可
WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.TAG_NAME, "body"))
)
# 渲染完成后再计算页面实际宽高、设置窗口尺寸
get_scroll_size = lambda axis: driver.execute_script(f'return document.body.parentNode.scroll{axis}')
driver.set_window_size(get_scroll_size('Width'), get_scroll_size('Height'))
# 使用新版Selenium标准写法定位元素并截图
driver.find_element(By.TAG_NAME, 'body').screenshot('prueba.png')

driver.quit()

针对带加载动画/懒加载页面的补充处理

如果你的页面存在全局加载动画、懒加载图片、渐入动画等延迟渲染内容,可以在上述等待逻辑基础上,增加加载状态消失的判断,必要时增加短时间固定等待确保渲染完成:

import time
# 等待全局加载动画消失,将选择器替换为你页面实际的加载动画元素选择器
WebDriverWait(driver, 10).until(
    EC.invisibility_of_element_located((By.CSS_SELECTOR, ".global-loading"))
)
# 若存在大量懒加载资源,可追加1-2秒等待确保所有内容渲染到页面
time.sleep(1.5)
注意点
  • 不要在窗口尺寸计算前调用driver.refresh(),否则会导致获取到的滚动宽高是刷新前的旧值,出现截图截断、尺寸错误问题
  • 若页面是React/Vue等前端框架构建的单页应用,必须等待框架挂载的根节点渲染完成后再计算宽高,不要在driver.get()执行后立刻取尺寸
  • Headless模式下放弃使用pyautogui截图,该工具仅能捕获本地系统桌面的画面,在无界面环境、服务器环境下完全无法工作

内容的提问来源于stack exchange,提问作者Sebastian Nin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:15:36