📜  elementnotvisibleexception (1)

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

ElementNotVisibleException

ElementNotVisibleException 是 Selenium 抛出的异常之一。它表示操作无法完成,因为试图对不可见的元素进行操作。

原因

此异常可能的原因是:

  • 元素存在于页面上但不可见。
  • 元素的 display 属性为 none
  • 元素在屏幕上存在,但在当前视口之外。
  • 元素被其他元素遮挡,无法访问。
解决方案

要解决 ElementNotVisibleException 的问题,请考虑以下解决方案:

  1. 等待元素变得可见,例如使用 显式等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待直到元素可见
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, 'myElement')))
  1. 如果元素可见但无法访问,请确保元素没有被其他元素遮挡,或尝试模拟鼠标交互,例如模拟鼠标滚轮或拖放操作。
from selenium.webdriver.common.action_chains import ActionChains

# 模拟鼠标滚轮
actions = ActionChains(driver)
actions.move_to_element(element).perform()
actions.move_by_offset(0, 100).perform()
actions.move_by_offset(0, -100).perform()
  1. 如果元素在屏幕上存在但在当前视口之外,请尝试滚动页面以使元素可见。
# 将页面向下滚动 100 像素
driver.execute_script("window.scrollBy(0, 100);")
  1. 如果元素的 display 属性为 none,请尝试更改它以使其可见。
# 更改元素的 display 属性
driver.execute_script("arguments[0].style.display = 'block';", element)
总结

ElementNotVisibleException 意味着无法对元素执行操作,因为元素不可见。在处理此异常时,请考虑元素可能不可见的原因,并尝试使用上述解决方案之一解决问题。