使用 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-else
和 try-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
我很困惑检查元素是否存在的最佳和正确方法是什么?使用 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-else
和 try-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