📜  selenium 如何找到消失的元素 (1)

📅  最后修改于: 2023-12-03 14:47:22.519000             🧑  作者: Mango

Selenium 如何找到消失的元素

在使用 Selenium 进行网页自动化测试时,有可能会遇到一些元素需要等待一段时间才能出现,或者出现后仅能短暂存在,然后又会消失。这时,我们需要找到一种方法来定位这些消失的元素。

等待元素出现

Selenium 提供了一些等待方法,用于等待元素的出现。

显式等待

显式等待是指使用 Selenium 提供的 WebDriverWait 类来等待指定的元素出现。

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

# 等待元素出现,等待时间为 10 秒
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
)

在上面的代码中,我们使用了 WebDriverWait 类来等待元素出现,等待时间为 10 秒。EC.presence_of_element_located 方法用来判断元素是否存在。如果元素存在,则将其赋值给 element 变量。

隐式等待

隐式等待是指使用 driver.implicitly_wait 方法来等待元素的出现。

from selenium import webdriver

# 设置隐式等待时间为 10 秒
driver = webdriver.Chrome()
driver.implicitly_wait(10)

# 到达某个页面,等待元素出现

在上面的代码中,我们设置了隐式等待时间为 10 秒。如果在等待时间内元素没有出现,Selenium 将会抛出 NoSuchElementException 异常。

等待元素消失

当我们需要等待某个元素消失时,可以通过以下两种方法来实现。

显式等待

显式等待的方式与等待元素出现的方式相似。

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

# 等待元素消失,等待时间为 10 秒
WebDriverWait(driver, 10).until_not(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
)

在上面的代码中,我们使用了 WebDriverWait 类来等待元素消失,等待时间为 10 秒。EC.presence_of_element_located 方法用来判断元素是否存在。如果元素不存在,则继续执行后面的代码。

自定义等待

我们可以自定义一个等待方法来等待元素消失。

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

# 自定义等待元素消失
def wait_for_element_disappear(by, identifier, timeout=10):
    locator = (by, identifier)

    def _not_found(driver):
        try:
            driver.find_element(*locator)
            return False
        except:
            return True

    WebDriverWait(driver, timeout).until(_not_found)

# 等待元素消失,等待时间为 10 秒
wait_for_element_disappear(By.ID, "myDynamicElement", 10)

在上面的代码中,我们自定义了一个名为 wait_for_element_disappear 的方法,用来等待元素消失。我们使用了 WebDriverWait 类和 find_element 方法来实现此功能。

总结

在本文中,我们介绍了使用 Selenium 如何找到消失的元素。我们探讨了等待元素出现的方式,包括显式等待和隐式等待,同时也介绍了等待元素消失的方式,包括显式等待和自定义等待。这些方法将有助于我们更好地处理一些需要等待的元素。