WebDriver元素定位方法

python语言中对应8种方法:

id                                     --->    name
class  name                            --->    tag   name
link text                              --->    partial link text
xpath                                  --->   css selector
find_element_by_id()                   --->   find_element_by_name()
find_element_by_class_name()           --->   find_element_by_tag_name()
find_element_by_link_text() ---> find_element_by_partial_link_text()
find_element_by_xpath() ---> find_element_by_css_selector()

1.id定位:

find_element_by_id("kw") 

2.name定位

find_element_by_name("wd")

3.class定位

find_element_by_class_name("s_ipt")
find_element_by_class_name("bg s_btn")
通过class属性来定位元素

4.tag定位

很难通过标tag name去区分不同的元素
find_element_by_tag_name("input")

5.link定位

专门用来定位文本链接
例如:
<a  class="mnav"  name="tj_trnews" href="http://news.baidu.com">新闻</a>

find_element_by_link_text("新闻")

6.partial link定位

partial link定位是对link定位的一种补充,当文本很长时,可以取文本的一部分定位,只要这部分能够唯一标识这个链接

find_element_by_partial_link_text("文本链接")

7.XPath定位

7.1绝对路径定位

find_element_by_xpath("/html/body/div/div[2]/div/div/div/form/span/input")
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")

7.2利用元素属性定位

find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//input[@id='su']")
//表示当前页面某个目录下,input表示定位元素的标签页
[@id='kw']表示这个元素的id属性值等于kw

通过name和属性值来定位
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_elemnt_by_xpath("*[@class='bg s_btn']")

不想指定标签名,则可以用星号(*)代替 使用XPath不局限于id、name和class这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素
find_element_by_xpath("//input[@maxlength='100']")
find_element_by_xpath("//input[@autocomplete='off']")
find_element_by_xpath("//input[@type='submit']")

7.3层级与属性结合

find_element_by_xpath("//span[@class='bg_s_ipt_wr']/input")
span[@class='bg s_ipt_wr']通过class属性定位到父元素,后面/input就表示父元素下面的子元素。若父元素没有可以利用的属性值,那么可以继续向上查找“爷爷”元素

find_element_by_xpath("//form[@id='form']/span/input")
find_element_by_xpath("//form[@id='form']/span[2]/input")
通过一级一级的向上查找,直到找到最外层的<html>标签,这样就是一个决定路径的写法了

7.4使用逻辑运算符

一个属性无法区分一个元素时,可以使用逻辑运算符连接多个属性来查找元素
<input id="kw" class="su" name="ie">
<input id="kw" class="aa" name="ie">
<input id="bb" class="su"  name="ie">
定位第一行元素
find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") 

8.CSS定位

 css使用选择器来为页面元素绑定属性,定位速度比XPath快

CSS选择器的常见语法

选择器                          例子                                        描述
.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"的所有元素

 8.1通过class属性定位

find_element_by_css_selector(".s_ipt")

find_element_by_css_selector(".bg s_btn")

find_element_by_css_selector()方法用于CSS语言定位元素,点号(.)表示通过class属性来定位元素

8.2通过id属性定位

find_element_by_css_selector("#kw")
find_element_by_css_selector("#su")
#表示通过id属性来定位元素

 8.3通过标签名定位

find_element_by_css_selector("input")
通过此种方式很难找到想要的元素
1)通过父子关系定位
find_element_by_css_selector("span>input")
2)通过属性定位:
find_element_by_css_selector("[autocomplete=off]")
find_element_by_css_selector("[name='kw']")
find_element_by_css_selector('[type="submit"]')
3)组合定位
find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
find_element_by_css_selector("span.bg s_btn_wr>input#su")
有一个父元素标签名叫span;
它有一个class属性值叫bg s_ipt_wr;
它有一个子元素,标签名叫input
这个子元素的class属性值叫s_ipt
 
                             XPath与CSS的类似功能对比
定位方式              Xpath                                           CSS
  标签              //div                                              div
 By id             //div[@id='eleid']                               div#eleid
 By  class         //div[@class='eleclass']                        div.eleid 

 By 属性           //div[@title='Move mouse here']                      div[title=Move mouse here]
                                                                          div[title^=Move]
                                                                          div[title$=here]
                                                                          div[title*=mouse]

 定位子元素        //div[@id='eleid']/*                                div#eleid>*
                  //div/h1                                            div>h1

 

posted @ 2016-02-23 16:45  爬虫之家  阅读(313)  评论(0编辑  收藏  举报