id定位
HTML规定id属性在HTML文档中必须是唯一的,这类似于公民的身份证号码,具有很强的唯一性。WebDriver提供的id定位方法就是通过元素的id属性来查找元素。通过id定位百度搜索输入框。用法如下
find_element_by_id('kw')
name定位
HTML规定name来指定元素的名称,因此它的作用更像是人的姓名。name的属性值,在当前页面中可以不唯一。用法
find_element_by_name('name')
class定位
HTML规定class来指定元素的类名。其用法与id、name类似,下面实例通过class属性定位。
find_element_by_class_name('s_ipt')
tag定位
HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往定位一类功能,所以通过tag识别某个元素的概率很低。用法
find_element_by_tag_name('input')
link定位
link定位与前面介绍的几种定位方法有所不同,它专门用来定位文本超链接。用法
1 | <a class="mnav" name="tg_trnews" href="http://news.baidu.com">新闻</a> # 链接事例 |
partial link定位
partial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接
1 | <a class="mnav" name="tg_trnews" href="#">这是一个超级长的文件链接</a> # 链接事例 |
XPath定位
XPath是一种在XML文档中定位元素的语言。因为HTML可以看作XML的一种实现,所以selenium用户可以使用这种强大的语言在Web应用中定位元素。XPath可以分为绝对路径定位和元素的属性值定位
绝对路径定位
绝对路径定位就是用绝对路径来定位元素
find_element_by_xpath("/html/body/div/div[2]/div/from/span/input")
元素属性定位
就是利用各个tag的属性值来进行定位(任何属性都可以,只要有唯一性就行)
1 | find_element_by_xpath("//input[@id='kw']") # 一个id为‘kw’的input标签 |
CSS定位
CSS是一种语言,他用用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。CSS可以较为灵活地选择控件的任意属性,一般情况下定位速度要多xpath快,但学习难度比xpath要大。
选择器 | 列子 | 描述 |
---|---|---|
.class | .intro | class选择器,选择class=“intro”的所有元素 |
#id | #firstname | id选择器,选择id=“firstname”的所有元素 |
* | * | 选择所有元素 |
element | p | 所有p元素 |
element>element | div > input | 选择父元素为div的所有input元素 |
element + element | div + input | 选择同一级中紧接在div元素之后的所有input元素(同级) |
[attribute=value] | [target=_blank] | 选择target=”_blank”的所有元素 |
通过class属性定位
find_element_by_css_selector('.s_ipt')
通过id属性定位
find_element_by_css_selector('#kw')
通过tag标签名定位
find_element_by_css_selector('input')
通过父子关系定位
find_element_by_css_selector('span>input')
通过属性定位
find_element_by_css_selector("[name='kw']")
组合定位
find_element_by_css_selector("form.fm>span>input.s_ipt")
_定位的这个元素标签名为input,这个元素的class为.s_ipt,并且他有一个父元素,标签为span,他的父标签span还有一个父标签form,且form的id值为fm_
用By定位元素
针对前面的八种定位方法,webdriver还提供了另一套写法,即统一调用find_element()方法,通过By来声明定位方法,并且传入对应定位方法的定位参数。使用此方法前要先导入By类
1 | from selenium.webdriver.common.by import By |
XPath与CSS的类似功能对比
定位方式 | XPath | CSS |
---|---|---|
标签 | //div | div |
By id | //div[@id=”eleid”] | div#eleid |
By class | //div[@class=”eleclass”] | div.eleclass |
By属性 | //div[@title=”my title”] | div[title=”my title”] |
定位子元素 | //[@id=”eleid”]/* | div#eleid>* |