(一) 前言 Web應用以及包含超文本標記語言(HTML)、層疊樣式表(CSS)、JS腳本的WEB頁面,基於用戶的操作(例如點擊提交按鈕),瀏覽器向WEB伺服器發送請求,WEB伺服器響應請求,返回給瀏覽器HTML及相關的JS、CSS、圖片等資源,瀏覽器使用這些資源生成WEB頁面,其中包含WEB各種視 ...
(一) 前言
Web應用以及包含超文本標記語言(HTML)、層疊樣式表(CSS)、JS腳本的WEB頁面,基於用戶的操作(例如點擊提交按鈕),瀏覽器向WEB伺服器發送請求,WEB伺服器響應請求,返回給瀏覽器HTML及相關的JS、CSS、圖片等資源,瀏覽器使用這些資源生成WEB頁面,其中包含WEB各種視覺元素,例如文本框、按鈕、標簽、圖標、覆選框、下拉框、圖片等,這些視覺元素或控制項都被Selenium稱為頁面元素(webelements)。
想要讓Selenium執行我們想要的操作,首先必須讓Selenium識別需要操作的元素,就像人通過眼睛去識別一樣,Selenium通過定位元素的方法去識別頁面元素,可以通過ID、
name、class屬性定位,以及Xpth和CSS選擇器定位,或者直接通過文本進行定位。
(二) 使用谷歌檢查頁面元素(根據自己的使用習慣選擇瀏覽器)
(1) 單擊滑鼠右鍵,選擇“檢查”。
(2) 需要使用Xpth或CSS選擇器時,可以在Elements視窗,Ctrl+F打開搜索框,在搜索框中輸入Xpth或CSS表達式,匹配的元素會高亮顯示(黃色部分),如果有多個匹配,搜索框的右側會顯示匹配數量。
(三) 元素定位
就如人工操作時,輸入查詢條件,然後點擊【查詢】按鈕,前提是首先要知道這個是搜索框,這個是【查詢】按鈕一樣,Selenium在執行功能操作之前,也要先識別這些元素。下麵是Selenium提供的8種find_element_by 方法,用於定位頁面元素。
方法 |
簡單說明 |
find_element_by_id() |
通過頁面元素的id來定位 |
find_element_by_name() |
通過頁面元素的name來定位 |
find_element_by_class_name() |
通過頁面元素的class名來定位 |
find_element_by_tag_name() |
通過頁面元素的tag name(標簽名稱)來定位 例如:find_element_by_tag_name('input') |
find_element_by_xpath() |
通過Xpth來定位 |
find_element_by_css_selector() |
通過CSS選擇器來定位 例如:find_element_by_css_selector('#zzk_q') |
find_element_by_link_text() |
通過元素標簽對之間的文本來定位 例如:find_element_by_link_text('園子') |
find_element_by_partial_link_text() |
通過元素標簽對之間的部分文本來定位 例如:find_element_by_partial_link_text('ET技術') |
(1) 如果加s(find_elements_by),就是返回一個列表(一組元素),不加的話就是返回一個元素,如果找不到元素就會拋出NoSuchElementException異常。
(2) 也可以用find_element(By.ID,'')這種寫法,使用這種方式要先導入By模塊
from selenium.webdriver.common.by import By
(3) 要使用CSS選擇器,可以參考jquery 語法關於選擇器的那部分
http://www.runoob.com/jquery/jquery-selectors.html
註:另外比較特殊的是class屬性,class屬性有空格時,空格並不是間隔,而是代表這個標簽有多個class名,定位的時候使用第一個名稱,或者不同名稱之間用.分開就行了。
例如:淘寶首頁這個標簽<div class="promo J_Promo tb-loading"></div>,可以用div.promo 或 div.promo.J_Promo 或 div.promo.J_Promo.tb-loading 定位