1 2 3 4 5 6 7 #!/usr/ bin/python # -- coding: UTF-8 -- from selenium import webdriver import time driver = webdriver.Firefox() driver.get(‘http:
#登录
1 2 yes=driver.find_element_by_name(“tj_login”).is_displayed()
#判断元素是否是存在的,返回true,说明是存在的,false表示不存在
返回false的原因有很多可能,可能是定位不准确换个方式,或者这个于是元素需要hover或者悬停才会显示出来,或者是display隐藏属性为none 1 2 3 driver.find_element_by_css_selector(“#u1 > a[name=\”tj_login\”]”).click() time.sleep(10 )
#等待10分钟
#输入用户名和密码
1 2 3 4 driver.find_element_by_id(‘TANGRAM__PSP_8__userName’).send_keys(‘1285154416 @qq.com’) driver.find_element_by_id(‘TANGRAM__PSP_8__password’).send_keys(‘123456 ’) driver.quit()
方式二:
前言
最近有很多小伙伴在问如何判断一个元素是否存在,这个方法在selenium里面是没有的,需要自己写咯。
元素不存在的话,操作元素会报错,或者元素有多个,不唯一的时候也会报错。本篇介绍两种判断元素存在的方法。
一、find_elements方法判断
1.find_elements方法是查找页面上所有相同属性的方法,这个方法其实非常好用,能熟练掌握技巧的不多,小编这次就发挥它的功效
2.由于元素定位的方法很多,所以判断的时候定位方法不统一也比较麻烦,这里我选择css定位(有喜欢xpath的同学可以自己用xpath语法)
3.写一个函数判断,找到就返回Ture,没找到就返回False(或者不止一个)
二、百度输入框为例
1.判断id为kw的元素是否存在
2.判断标签为input元素是否存在
3.判断id为xxx元素是否存在
三、捕获异常方法
1.如果没找到元素会抛异常,返回False
2.如果找到元素就返回Ture
3.但是这个方法有个弊端,如果页面上存在多个一样元素,也会返回Ture的(也就是说只要页面上有元素就返回Ture,不管几个)
四、参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 # coding:utf-8 from selenium import webdriverdriver = webdriver.Firefox() driver.implicitly_wait(10 ) driver.get("http://www.baidu.com" ) def is_element_exist(css): s = driver.find_elements_by_css_selector(css_selector=css) if len(s) == 0 : print "元素未找到:%s" %css return False elif len(s) == 1 : return True else : print "找到%s个元素:%s" %(len(s),css) return False # 判断页面上有无id为kw的元素 if is_element_exist("#kw" ): driver.find_element_by_id("kw" ).send_keys("yoyoketang" ) # 判断页面有无标签为input元素 if is_element_exist("input" ): driver.find_element_by_tag_name("input" ).send_keys("yoyoketang" ) # 判断页面有无id为xxx的元素 if is_element_exist("xxx" ): driver.find_element_by_id("xxx" ).send_keys("yoyoketang" ) def isElementExist(css): try : driver.find_element_by_css_selector(css) return True except : return False print isElementExist("#xxx" )