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

      

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    Binary Tree Level Order Traversal II
    图和图的遍历算法
    Remove Duplicates from Sorted List
    Binary Tree Preorder Traversal
    Merge Sorted Array
    [POJ2774][codevs3160]Long Long Message
    [BZOJ2251][2010Beijing Wc]外星联络
    [BZOJ1692][Usaco2007 Dec]队列变换
    [BZOJ1717][Usaco2006 Dec]Milk Patterns 产奶的模式
    [BZOJ1131][POI2008]Sta
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13595372.html
Copyright © 2020-2023  润新知