if d.find_find_element_by_xpath('xxxx'):
if语句可以这样写吗?表达该元素是否存在
如果不行的话,如何写表达元素是否存在
如果d.find_find_element_by_xpath('xxxx')找不到元素的返回值是None就可以这样写
location=d.find_find_element_by_xpath('xxxx')
if not location is None:
do work
可以,只要是值或返回值是bool型或可以转化为有效 的bool型都可以作为if 判断语句,d.find_find_element_by_xpath('xxxx') 他返回的是None或x_path , 他们转化为bool类型分别对应False和True,所以可以作为if 的判断语句。
大多数时候,你这样写是没有问题的,只要函数find_find_element_by_xpath('xxxx')的返回值是bool类型或者可以转化为bool的0,1等。
具体是需要查看你这个函数的定义的返回值来写。总结起来:
1)返回值是bool, if (returnVal):
2)返回值是对象,if(not returnVal):
3)返回值是数值, if(0!=returnVal):
4)返回值是字符串, if(''!=returnVal):
5)返回值是list的元素, if(returnVal not in list):
不行的,元素存在这个方法返回的元素的位置,元素不存在就会报错
我现在没有找到特别好的办法,用try catch时间太长了;
如果你找到了,麻烦告诉我一下
你可以 试下这样,判断元素是否存在,这个是对应的方法封装
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.wait import WebDriverWait
def is_element(self, locator, time_out=0) -> bool:
"""判断页面是否存在该元素
元素存在返回True,否则返回False
:param locator: 定位器 (by=By.ID, value=None)
:param time_out: 超时,默认 0
:return:
"""
try:
WebDriverWait(self.driver, time_out).until(
EC.presence_of_element_located(locator)
)
except NoSuchElementException:
print("元素不存在")
return False
else:
print("元素存在")
return True
可以用find_elements_by_来判断,为elements时,如name=driver.find_elements_by_id('save'),没找到时name为空,不会报错中断