【问题标题】:Check if element exists python selenium检查元素是否存在python selenium
【发布时间】:2018-01-23 13:16:05
【问题描述】:

我正在尝试通过

定位元素
element=driver.find_element_by_partial_link_text("text")

在 Python selenium 中,元素并不总是存在。是否有一条快速线来检查它是否存在并在它不存在时获取 NULL 或 FALSE 来代替错误消息?

【问题讨论】:

  • quick statement to check 到底是什么意思? Selenium 不支持statement。您必须编写一行/代码块。
  • driver.find_element_by_partial_link_text("text") 是检查元素是否存在的足够快的方法......你能更明确地说明你想让你的代码做什么吗?
  • 当元素不存在时给出错误信息。不存在时是否有可能得到 NULL 或 FALSE?

标签: python selenium selenium-webdriver webdriver ui-automation


【解决方案1】:

您可以如下实现try/except 块来检查元素是否存在:

from selenium.common.exceptions import NoSuchElementException

try:
    element=driver.find_element_by_partial_link_text("text")
except NoSuchElementException:
    print("No element found")

或使用find_elements_...() 方法之一进行检查。它应该返回空列表或传递的选择器匹配的元素列表,但如果没有找到元素也不例外:

elements=driver.find_elements_by_partial_link_text("text")
if not elements:
    print("No element found")  
else:
    element = elements[0]  

【讨论】:

    【解决方案2】:

    有时元素不会立即出现,对于这种情况我们需要使用显式等待:

    browser = webdriver.Chrome()
    wait = WebDriverWait(browser, 5)
    
    def is_element_exist(text):
        try:
            wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, text)))
        except TimeoutException:
            return False
    

    没有try/ except的解决方案:

    def is_element_exist(text):
        elements = wait.until(EC.presence_of_all_elements_located((By.PARTIAL_LINK_TEXT, text)))
        return None if elements else False
    

    显式等待的工作原理您可以阅读here

    进口:

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

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 2016-08-05
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      相关资源
      最近更新 更多