如何使用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
相关产品推荐
相关产品推荐

