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")

  

posted on 2020-09-01 13:55  星空6  阅读(1118)  评论(0编辑  收藏  举报

导航