使用 if else 查找元素或尝试 except in Python Selenium

Find element using if else or try except in Python Selenium

我很困惑检查元素是否存在的最佳和正确方法是什么?使用 try-except 还是 if-else?尝试查找元素时,两者的 advantages/disadvantages 有什么区别?

def find_logo():
    return driver.find_elements(By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")

if find_logo(): 
    print("Found the logo")
else:
    print("Cannot find the logo")

因此将得到与 try 相同的结果,除了:

def find_logo():
    return driver.find_element(By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")

try:
    find_logo()
    print("Found the logo")
except NoSuchElementException:
    print("Cannot find the logo")

两者的工作方式似乎相同,但哪种才是正确的做法?

在第一种情况下函数 return 一个列表,在第二种情况下,函数 return 您正在寻找的网络元素。

规范地,if-elsetry-except 逻辑都需要修改,但是它们需要根据您的用例实施。


if find_logo()if find_logo() 将始终成功,因为在 def find_logo() 中您使用了 find_elements()可能根本没有 return 任何元素。在这种情况下,您可能需要检查 list 大小是否不是 0.


尝试:find_logo()try: find_logo() 似乎在比较时组织得更好 NoSuchElementException 检查到位时未找到 特定 元素。


代码优化

然而,根据最佳实践,在查找元素时,您需要为 visibility_of_element_located() 归纳 ,您可以使用以下逻辑:

try:
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")))
    print("Found the logo")
except TimeoutException:
    print("Cannot find the logo")
    

注意:您必须添加以下导入:

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