1. 程式人生 > >python+selenium之定位web頁面元素二:css定位

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”。