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!!!
浙公网安备 33010602011771号