📌  相关文章
📜  如何在 selenium python 中检查网页上是否可见元素(1)

📅  最后修改于: 2023-12-03 15:24:22.710000             🧑  作者: Mango

在 Selenium Python 中检查网页上是否可见元素

在使用 Selenium Python 进行测试时,我们经常需要检查网页上是否存在某些特定的元素。但是,有时候这些元素可能未被正确加载或渲染,那么如何判断元素是否可见呢?下面将介绍几种方法。

1. 使用 Expected Conditions

Selenium 内置了许多 Expected Conditions,可以用于等待特定条件的出现,其中就包括等待某个元素可见。这个方法非常简单,只需要从 selenium.webdriver.support.expected_conditions 中导入 visibility_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

# 获取 webdriver 实例 driver

# 等待元素加载完毕并可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "myElement"))
)

# 对元素进行操作
element.click()
2. 检查元素属性

如果不想使用 Expected Conditions,我们可以检查元素自身的某些属性来判断是否可见。下面是一些常见的属性:

  • is_displayed():如果元素可见,则返回 True,否则返回 False
  • size:返回元素的宽度和高度,如果元素不可见或未被加载,则返回 (0, 0)。
  • location:返回元素的左上角在页面上的坐标,如果元素不可见或未被加载,则返回 (0, 0)。
# 获取元素对象
element = driver.find_element_by_id("myElement")

# 检查元素可见性
if element.is_displayed():
    # 对元素进行操作
    element.click()
else:
    # 等待元素加载
    WebDriverWait(driver, 10).until(lambda d: element.is_displayed())
3. 捕获异常

第三种方式不直接检查元素是否可见,而是使用 Selenium 的异常捕获机制。在默认情况下,Selenium 在查找元素失败时会抛出 NoSuchElement Exception,我们可以在捕获这个异常时等待元素加载完毕。

from selenium.common.exceptions import NoSuchElementException

try:
    # 获取元素对象
    element = driver.find_element_by_id("myElement")
    # 对元素进行操作
    element.click()
except NoSuchElementException:
    # 等待元素加载
    WebDriverWait(driver, 10).until(lambda d: d.find_element_by_id("myElement").is_displayed())
    # 获取元素对象
    element = driver.find_element_by_id("myElement")
    # 对元素进行操作
    element.click()

以上三种方式都可以检查网页上是否可见元素,其中第一种方法使用较广泛。三种方法各有优缺点,程序员可以选择各种方法结合使用,来达到最好的效果。