1. 程式人生 > 實用技巧 >Selenium3+python3自動化(二十六)--判斷元素存在

Selenium3+python3自動化(二十六)--判斷元素存在

前言

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