前言
如何判断一个元素是否存在,这个方法在selenium里面没有的,需要自己写的。
元素不存在的话,操作元素会报错,或者元素有多个,不唯一的时候也会报错。下面介绍两种判断元素存在的方法。
一、find_elements方法判断
1.find_elements方法是查找页面上所有相同属性的方法,这个方法其实非常好用。
2.由于元素定位的方法很多,所以判断的时候定位方法不统一也比较麻烦,这里我选择xpath定位。
3.写一个函数判断,找到就返回True,没找到就返回False(或者不止一个)
def only_one_element(driver,xpath): result=driver.find_elements_by_xpath(xpath) if len(result)!=1:#0或>1 print("定位到{}个".format(len(result))) return False if len(result)==1: print("定位到1个") return True
二、百度输入框为例
1.判断标签为input元素是否存在
2.判断id为kw的元素是否存在
3.判断iidd为kw的元素是否存在
F12查看百度输入框属性
参考代码:
# coding:utf-8 from selenium import webdriver def only_one_element(driver,xpath): result=driver.find_elements_by_xpath(xpath) if len(result)!=1:#0或>1 print("定位到{}个".format(len(result))) return False if len(result)==1: print("定位到1个") return True driver=webdriver.Chrome() driver.get("https://www.baidu.com") rs=only_one_element(driver,"//input") rs1=only_one_element(driver,"//input[@id='kw']") rs2=only_one_element(driver,"//input[@iidd='kw']")
运行结果:
定位到17个 定位到1个 定位到0个
三、捕获异常方法
1.如果没找到元素会抛异常,返回False
2.如果找到元素就返回True
3.但是这个方法有个弊端,如果页面上存在多个一样元素,也会返回True的(也就是说只要页面上有元素就返回True,不管几个)
# coding:utf-8 from selenium import webdriver def is_element_exist(driver,xpath): try: driver.find_element_by_xpath(xpath) return True except: return False driver=webdriver.Chrome() driver.get("https://www.baidu.com") # if is_element_exist(driver,"//input"): # driver.find_element_by_xpath("//input").send_keys("xixi")#报错:selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable if is_element_exist(driver,"//input[@id='kw']"): driver.find_element_by_xpath("//input[@id='kw']").send_keys("xixi") if is_element_exist(driver,"//input[@iidd='kw']"): driver.find_element_by_xpath("//input[@iidd='kw']").send_keys("xixi")