前言
如何判斷一個元素是否存在,這個方法在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")