前言
web自动化中最核心最难的部分就是元素的定位,然而Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准确抓取到对应元素才能进行后续的自动化控制;下面就对各种元素定位的方式进行总结。
八种基本元素定位
Id定位
-
这是一种最常用的定位方式,假设已知某个元素的id或通过Firebug查找得到id的相关信息,可通过此方法进行定位,如下图:id属性是html中是唯一的,类似于元素的身份证号码,webdriver提供的id定位方法就是通过元素的id属性来查找元素driver.find_element_by_id(“kw”)找到元素所在标签的id属性值
Name定位
-
name定位方式将会识别首个name属性等于定位值的页面元素。如果有多个元素的name属性都相同,那么可以使用过滤器来进一步细化定位。默认的过滤器类型是value(也就是value属性)
-
实例代码:driver.find_element_by_name(“tj_trnews”)
Class_Name定位
-
html规定class来指定元素的类型,class属性在页面中不是唯一的
-
实例代码:driver.find_element_by_class_name("bri")通过class属性来定位元素的位置
Tag_Name定位
-
driver.find_elements_by_tag_name("input")
-
通过标签的名称来定位元素的位置,这种定位方法比较困难,因为同一个页面中,相同名称的标签往往比较多
Link_Text定位
-
link_text专门用来定位文本链接
-
driver.find_element_by_link_text("新闻")
-
使用a标签中链接的文字内容来定位页面上的具体元素
Partial_Link_Text定位
-
partial_link_text是link_text的一种补充,有些文本链接较长的时候,可以取文本链接的一部分进行定位,只要这一部分信息可以唯一的标识出这个链接
driver.find_element_by_partial_link_text(“-腾讯视频")
Xpath定位
-
xpath定位方式:表示的由xml(extend markup language 可扩展标记语言,也是由一系列标签所构成,主要是实现数据交换(用于做配置文件))+path,以xml格式的树状结构形式进行递归逐级定位;
-
xpath的定位两种方式:绝对路径定位、相对路径定位;
绝对路径:从顶级父标签到当前标签的整个结构过程称之为绝对路径;
在使用绝对路径时,如果同级中存在多个相同标签的话,则通过索引进行具体选择(其索引的初始值是从1开始);但是在实际脚本开发过程中,一般不用,因为如果使用绝对路径则跨度较大,只需要页面稍微修改结构则整个定位失败;(稳定性极差)
相对路径:表示的是相对当前标签而言;
-
i.属性定位语法://标签名[@属性名=属性值]
注意:1.标签名可以具体,也可以使用* (表示的任意标签,定义的范围会比具体的标签更广,可能定位出多个对象) 2.属性值如果是字符串的话则需要使用引号;
-
ii.使用逻辑运算符进行实现多个属性定位:and or not例如://input[@name='uname' and @]但是一般组合