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

如何使用Selenium等待多个加载元素全部消失(Python+Edge)

解决方案:等待所有加载提示元素消失

你可以通过自定义等待条件来实现,Selenium的expected_conditions里没有直接等待所有元素消失的方法,但可以用lambda表达式配合WebDriverWait完成需求:

方法1:等待所有匹配元素从DOM中移除

这种方式会等待页面上所有包含"Loading..."文本的元素完全不存在:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements(By.XPATH, "//div[contains(text(),'Loading...')]")) == 0
)

方法2:等待所有匹配元素都不可见(更贴合场景)

如果加载完成后,提示元素可能还留在DOM中但被隐藏(比如通过CSS设置display: none),可以检查所有元素的可见性:

WebDriverWait(driver, 20).until(
    lambda driver: all(not elem.is_displayed() for elem in driver.find_elements(By.XPATH, "//div[contains(text(),'Loading...')]"))
)

更精准的定位(推荐)

因为你提到加载提示元素有固定类名x-mask-msg-text,用类名定位可以避免其他含"Loading"文本的元素干扰:

# 等待所有类为x-mask-msg-text的元素都不可见
WebDriverWait(driver, 20).until(
    lambda driver: all(not elem.is_displayed() for elem in driver.find_elements(By.CLASS_NAME, "x-mask-msg-text"))
)

为什么原方法不行?

你之前用的EC.invisibility_of_element()只会等待第一个匹配到的元素消失,无法保证所有图表的加载提示都已隐藏,所以需要遍历所有匹配元素的状态来确认。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:24:17