selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的。所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了。
下面简单介绍一下个定位方法概念
1,id定位:
find_element_by_id() 只会查找页面符合条件的第一个节点,并返回;但是定位不到元素则会报错。
# 定位百度首页输入框
2、name定位:
find_element_by_name()
# 定位百度一下
3、class定位:
find_element_by_class_name()
# 根据class属性定位百度一下
PS:
# 当class属性有多个的时候,带空格
# 当有多个class属性的时候,此空格并不是空的字符串,而是此class具有多重属性
# class="search_ipt search_inp_border j_search_input tb_header_search_input"
# 贴吧输入框
# 确定其中某一个属性是页面唯一以后,取此属性即可
driver.find_element_by_class_name("search_ipt").send_keys("你好")
4、link定位(链接):
find_element_by_link_text("http://www.baidu.com/link?url=sK3y4KUNV8YUp7YLDZF5Cr9ORQ56YrlkyQ_F_Qr1t_NhY_NRGezXt197KjOq1NqG")
# <a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
# href="http://news.baidu.com": 一般为link属性
#根据link的文字内容“新闻”定位到link链接
#如果herf字段过长,可以使用partial_link定位,测方法可截取部分文字定位
find_element_by_partial_link_text("sK3y4KUNV8YUp7YLDZF5Cr9ORQ56YrlkyQ_F_Qr1t_NhY_NRGezXt197KjOq1NqG")
5,CSS定位:
find_element_by_css_selector()(css路径并不唯一,所以不建议使用)
6,Xpath定位:最佳选择
find_element_by_xpath()
7,复数定位方式:elements (对元素不唯一)
#以ID为例,与单数定位不同在于element是elements
driver.find_elements_by_id()
#复数定位关键是找出元素的下标点
# 当不清楚该元素在页面中存在几个定位到几个元素的时候,可以用已下方法打印出来筛选
elements = driver.find_elements_by_id('kw')
print(len(elements))