1. 程式人生 > >selenium_webdriver(python)元素定位詳解

selenium_webdriver(python)元素定位詳解

webdriver 提供了一系列的物件定位方法,常用的有以下幾種
 · id
 · name
 · class name
 · link text
 · partial link text
 · tag name
 · xpath
 · css selector

由以下例項我們可以看到,一個百度的輸入框,可以用這麼幾種方式去定位。

#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Ie()
browser.get("http://www.baidu.com")
#########百度輸入框的定位方式##########
#通過id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通過name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通過tag name 方式(標籤名稱)定位,這個此處失敗,因該頁面有多個 input 標籤
browser.find_element_by_tag_name("input").send_keys("selenium")
#通過class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通過CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通過xphan 方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

CSS 定位詳細說明:

CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML 和XML 文件的表現。
CSS 使用選擇器來為頁面元素繫結屬性。這些選擇器可以被selenium 用作另外的定位策略。
CSS 的比較靈活可以選擇控制元件的任意屬性,上面的例子中:
find_element_by_css_selector("#kw")
通過find_element_by_css_selector( )函式,選擇取百度輸入框的id 屬性來定義
也可以取name 屬性
<a href="http://news.baidu.com" name="tj_news">新聞</a>
driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()
可以取title 屬性
<a onclick="queryTab(this);" mon="col=502&pn=0" title="web"href="http://www.baidu.com/">網頁</a>
driver.find_element_by_css_selector("a[title=\"web\"]").click()
也可以是取..:(類選擇器)
<a class="RecycleBin xz" href="javascript:void(0);">
<span style="font-size:18px;">driver.find_element_by_css_selector("a.RecycleBin").click()</span>

XPath 定位詳細說明:

什麼是XPath:http://www.w3.org/TR/xpath/
XPath 基礎教程:http://www.w3schools.com/xpath/default.asp
selenium 中被誤解的XPath : http://magustest.com/blog/category/webdriver/
XPath 是一種在XML 文件中定位元素的語言。因為HTML 可以看做XML 的一種實現,
所以selenium 使用者可是使用這種強大語言在web 應用中定位元素。
XPath 擴充套件了上面id 和name 定位方式,提供了很多種可能性,比如定位頁面上的
第三個多選框。

#xpath:attributer (屬性)
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
#input 標籤下id =kw 的元素
#xpath:idRelative (id 相關性)
driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium")
#在/form/span/input 層級標籤下有個div 標籤的id=fm 的元素
driver.find_element_by_xpath("//tr[@id='check']/td[2]").click()
# id 為'check' 的tr ,定閃他裡面的第2個
#xpath:position (位置)
driver.find_element_by_xpath("//input").send_keys("selenium")
driver.find_element_by_xpath("//tr[7]/td[2]").click()
#第7個tr 裡面的第2個td
#xpath: href (水平參考)
driver.find_element_by_xpath("//a[contains(text(),'網頁')]").click()
#在a 標籤下有個文字(text)包含(contains)'網頁' 的元素
#xpath:link
driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click()
#有個叫a 的標籤,他有個連結href='http://www.baidu.com/ 的元素

link 定位詳細說明:

有時候不是一個輸入框也不是一個按鈕,而是一個文字連結,我們可以通過link

<span style="font-size:14px;">#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_link_text("貼吧").click()
browser.quit()</span>

Partial link text 定位:

通過部分連結定位,這個有時候也會用到,我還沒有想到很好的用處。拿上面的例

子,我可以只用連結的一部分文字進行匹配:

browser.find_element_by_partial_link_text("貼").click()
#通過find_element_by_partial_link_text() 函式,我只用了“貼”字,指令碼一樣找到了"貼吧" 的連結