css selector 元素定位

        作为一种具有强大定位功能的元素定位方法,css selector可根据元素任意属性进行定位,又可根据元素位置进行定位,是定位元素的最终解决办法之一。css定位更快、语法更简洁,但是xpath更直观、更好理解一些。

CSS(Cascading Style Sheets)是一种语言,他用来描述HTML和XML文档的表现,CSS使用选择器来为页面元素绑定属性。这些选择器可以被Selenium用作另外的定位策略。

CSS可以较为灵活的选择空间的任意属性,一般情况下定位速度比XPath快,CSS选择器常见语法如表所示.

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”的所有元素

1、右键 copy css selector方法

选中该元素,右键copy---Copy selector

driver.find_element_by_css_selector("body > div.w1180 > div > div.reg_main > div.reg_left.fl > form > ul > li:nth-child(1) > p:nth-child(2) > input")

2、如果元素某个属性是唯一的,可以通过属性定位

如果元素某个属性是唯一的,那么直接在该属性两边加上中括号,就可以定位该元素,

举个例子,例如<input  value="1"/>

那么定位时,可以这样操作

driver.find_element_by_css_selector('[value="1"]')

find_element_by_css_selector(‘[autocomplete=off]’)

find_element_by_css_selector(“[name=’wd’]”)

find_element_by_css_selector(‘[type=”submit”]’)

注意:在CSS当中也可以使用元素的任意属性,只要这些属性可以唯一标识这个元素。对于属性值来说,可夹引号,也可以不加,但要注意和整个字符串的引号进行区分。

3、通过class属性定位:

<input id="kw" class="s_ipt" value maxlength="255" autocomplete="off">

find_element_by_selector(".s_ipt")   

(.s_ipt里面小数点代表class属性)

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

4、通过id属性定位:

find_element_by_selector("#kw") 

     (#用来表示 id属性)

井号(#)表示通过id属性来定位元素。

5、通过标签名定位:

find_element_by_css_selector('input')

在CSS语言中,用标签名定位元素不需要任何符号标识,直接使用标签名即可。但是标签名重复的概率非常大,所以很难通过这种方式找到想要的元素。

6、通过父子关系定位:

find_element_by_css_selector('span>input')

上面的写法表示有父元素,它的标签名为span,查找它的所有标签名叫input的子元素。

在下图中,想要定位到"您好 changcheng"这个元素的话,可以看出,用户名是会变化的,通过链接文本定位是不行的,

这个时候可以通过父子元素来定位,可以看到它有个父元素,class="site-nav-right fr",

welcome=self.driver.find_element_by_css_selector(".site-nav-right.fr > a:nth-child(1)").text
print(welcome)
".site-nav-right.fr > a:nth-child(1)"这表示,找到class属性为site-nav-right.fr的父元素,它的子元素a标签的第一个子元素,".text"表示找到这个元素后,获取这个元素的文本信息。
print(welcome),运行后打印出出来文本。

补充:可以通过xpath子元素来定位父元素,比如想通过分类“文艺片1”定位前面的复选框是否选中,可先用xpath定位到“文艺片1”,//span[text()="文艺片1"]

然后,再“/../”定位到上一级的input标签。

xi_ju = login.find_element_by_xpath('//span[text()="文艺片1"]/../input')

接下来是一个判断,如果已经被勾选就不点击,没勾选就点击一下。

        # 8、勾选”文艺片1“
        wen_yi = login.find_element_by_xpath('//span[text()="文艺片1"]/../input')
        if wen_yi.is_selected():
            pass
        else:
            wen_yi.click()

7、css可以用多个属性组合的方式定位一个元素

可以把上面的定位策略组合起来使用,这就大大加强了元素定位的唯一性。

举个例子1,例如<input class="a b c d" value="1"/>

那么定位时,可以这样操作

driver.find_element_by_css_selector(".a.b.c.d[value='1']")

举个例子2,

<body>
 <div id="id">
   <...>
       <input class="class">

<body />

driver.find_element_by_css_selector("div#id input.class")

表示页面中有一个id="id"的div元素,在该div元素的子孙节点中有个input标签,该input标签有个class="class"的属性。我们要定位的就是这个input标签

举个例子3.

find_element_by_css_selector("form.fm>span>input.s_ipt")

我们要定位的这个元素的标签名为input,这个元素的class属性值为s_ipt;并且它有一个父元素,标签名为span,它的父元素还有父元素,标签名为form,而且class属性为fm。我们要找的就是必须满足这么多特征的一个元素。

Xpath 与CSS的类似功能对比

定位方式XpathCSS

标签

//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/h1

div#eleid

div>h1

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值