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

HTML Canvas图像加载状态判断与显示耗时统计的技术咨询

HTML Canvas图像加载状态判断与显示耗时统计的技术咨询

嘿,没问题!我这就给你一个Python + Selenium的完整示例,帮你实现点击按钮后统计Canvas图像显示的耗时~

核心思路

咱们要做的就是:

  • 点击按钮前记录精确时间戳
  • 等待Canvas中的图像完全绘制完成
  • 图像显示后再记录一次时间戳,两者差值就是耗时

完整代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化浏览器驱动(这里用Chrome,你也可以换成Firefox等)
driver = webdriver.Chrome()
driver.get("你要测试的页面URL")

try:
    # 1. 等待触发按钮可点击
    trigger_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "your-trigger-button-id"))
    )

    # 2. 记录点击前的高精度时间
    start_time = time.perf_counter()

    # 3. 点击按钮触发Canvas图像加载
    trigger_button.click()

    # 4. 自定义等待条件:检查Canvas是否已绘制有效图像
    def canvas_image_loaded(driver):
        canvas_element = driver.find_element(By.ID, "your-canvas-id")
        # 通过JS获取Canvas上下文,检查是否有非透明像素(假设初始Canvas是透明的)
        return driver.execute_script("""
            const ctx = arguments[0].getContext('2d');
            if (!ctx) return false;
            const imgData = ctx.getImageData(0, 0, arguments[0].width, arguments[0].height);
            // 遍历像素的alpha通道,只要有一个非透明像素就认为图像已加载
            for (let i = 3; i < imgData.data.length; i += 4) {
                if (imgData.data[i] > 0) {
                    return true;
                }
            }
            return false;
        """, canvas_element)

    # 等待Canvas图像加载完成,超时时间设为10秒
    WebDriverWait(driver, 10).until(canvas_image_loaded)

    # 5. 记录结束时间并计算耗时
    end_time = time.perf_counter()
    elapsed_time = end_time - start_time
    print(f"Canvas图像从触发到显示完成耗时: {elapsed_time:.4f} 秒")

finally:
    # 关闭浏览器
    driver.quit()

关键注意事项

  • 替换定位符:把代码中的your-trigger-button-id和your-canvas-id换成你页面中实际的元素ID,也可以根据需要改用By.CLASS_NAME、By.XPATH等其他定位方式。
  • 适配不同加载场景:如果你的Canvas是通过页面中的<img>元素绘制的,还可以监听该img的onload事件来判断加载状态,再结合Canvas的绘制检查,结果会更准确。
  • 高精度计时:用time.perf_counter()而不是time.time(),因为它专门用于短时间间隔的精确测量,不受系统时间调整的影响。

备注:内容来源于stack exchange,提问作者Guru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:28:03