selenium的元素定位

所谓定位,就是要找到位置。比如生活中常见的GPS定位,就是要找到目标位置所在的经纬度

那我们这里所说的定位,是要找到一个元素在网页上的位置。因为selenium可以驱动浏览器,通过定位规则找到目标对象的位置,从而来操作这个元素。比方说 我们现在要对这个输入框写入一个test,来测试输入框的功能,那必然要找到这个网页上输入框位置在哪里,然后再写入。

这里我们整理一些常用的定位方式

 

以百度首页为例

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

 

 


方式一:通过ID来定位,ID是不会变的,就比如我们要找这条街上的***,那他的身份证就是一个唯一的ID,找到这个ID就好了
driver.find_element_by_id('kw')

方式二:通过name来定位,name可能会重名,比如要找某某村的小红,可能这个村里叫小红的就有3个呢,
如果我只需要找一个叫小红的,写法:
driver.find_element_by_name('wd')

如果我要把这些叫小红的都找出来,写法:
driver.find_elements_by_name('wd')

方式三:通过tag_name来定位,tag_name也可能会重名,因为一个标签可能会搜索出好几个。比如现在要找某某村的所有小孩,这个小孩就是一个标签。这样形容
似乎不是很合理。那我们一个html网页,无非就是输入框,按钮,链接,这些都有特定的标签来标识,这个时候我们用标签来定位
driver.find_element_by_tag_name('input')
方式四:通过class属性来定位。类名,class是用来装饰的,是样式
driver.find_element_by_class_name('s_ipt')


方式五:链接文本匹配


driver.find_element_by_link_text('新闻')
匹配部分文本,写法如下:
driver.find_element_by_partial_link_text('产品')

 

 

 

方式六:xpath定位,实际使用过程中基本都是用这种方式来定位。//开头  标签[@属性=属性值]  属性组组合,如//input[@id='kw']

写法:

driver.find_element_by_xpath('//input[@id="kw"]')

如果一个属性值定位不到,也可以用多个属性用and连接
driver.find_element_by_xpath('//input[@id="kw" and @class="s_ipt"]')

一般我们是用到上面这种相对定位的方式,绝对定位的方式一般不会用,绝对定位就是从根节点开始找,这样如果网页稍微有变化,就找不到了。


A\通过文本内容来定位text()

写法://input[@id="su" and text()="百度一下"]或者//input[text()="百度一下"]  这种一般使用在定位菜单啊 这些文本内容不会变化的元素


B\通过contains()函数来定位,比如当文本内容很多时,我们可以用contains(text(),"上学啦")部分匹配文本
也可以部分匹配某个属性值,比如contains(@class,"bg"),表示匹配class属性的部分值来查找元素
以上图为例,//input[contains(@class,"bg")]--小心机,当我们看到class的值有空格分开的时候,表示是多个class
//input[contains(text(),"百度")]



 


 

 



 

 

posted @ 2019-11-11 16:32  噜啦啦zyq  阅读(167)  评论(0编辑  收藏  举报