python+selenium之定位web页面元素二:css定位

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> 元素之后的所有 <p> 元素。

[attribute=value]

[target=_blank]

选择 target="_blank" 的所有元素。

下面同样以百度输入框和搜索按钮为例介绍 CSS 定位的用法。

 

……

<span class="bg s_ipt_wr">
<input id="kw" class="s_ipt" autocomplete="off" maxlength="100" value="" name="wd">
</span>
<span class="bg s_btn_wr">
<input id="su" class="bg s_btn" type="submit" value="百度一下">

通过 class 属性定位:

find_element_by_css_selector(".s_ipt") find_element_by_css_selector(".bg s_btn")

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

通过 id 属性定位:

find_element_by_css_selector("#kw") find_element_by_css_selector("#su")

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

通过标签名定位:

find_element_by_css_selector("input")

在 CSS 语言中用标签名定位元素不需要任何符号标识,直接使用标签名即可,但我们前面已经了解到

标签名重复的概率非常大,所以通过这种方式很难唯一的标识一个元素。

通过父子关系定位:

find_element_by_css_selector("span>input")

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

通过属性定位:

find_element_by_css_selector("input[autocomplete='off']") find_element_by_css_selector("input[maxlength='100']") find_element_by_css_selector("input[type='submit']")

在 CSS 当中也可以使用元素的任意属性,只要这些属性可以唯一的标识这个元素。

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

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。好吧!我们要找的就是具有这么多特征的一个子元素。

我们通过可以使用 Firebug 工具帮助我们生成 CSS 语法。通过 Firebug 定位元素,在元素上右键点击选择“复制 CSS”。

猜你喜欢

转载自blog.csdn.net/ak739105231/article/details/83752408