Selenium提供了8種定位方式。
-
id
-
name
-
class name
-
tag name
-
link text
-
partial link text
-
xpath
-
css selector
這8種定位方式在Python selenium中所對應的方法為:
-
find_element_by_id()
-
find_element_by_name()
-
find_element_by_class_name()
-
find_element_by_tag_name()
-
find_element_by_link_text()
-
find_element_by_partial_link_text()
-
find_element_by_xpath()
-
find_element_by_css_selector()
百度頁面查看元素屬性,頁面如下


通過id定位
find_element_by_id("kw")
find_element_by_id("su")
通過name定位:
find_element_by_id("wd")
通過class name 定位
find_element_by_class_name("s_ipt")
通過tag name定位
find_element_by_tag_name("input")
可見僅僅通過標簽名去定位時,一般一種標簽在一個頁面里面會出現不止一次甚至大量出現,這種定位方式的作用不是很大,所以用的也就比較少
通過xpath定位
絕對路徑定位
find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//*[@name='wd']")
其中的標簽名input也可以用*來代替,而且只要是在該標簽內,任意屬性都可以,比如搜索框的maxlength屬性:
find_element_by_xpath("//input[@maxlength='255']")
查找搜索框的時候發現其上級元素form又唯一的id方便定位,就可以先查找到form元素然后依次往下寫路徑
find_element_by_xpath("//form[@id='form']/span/input")
如果元素的單個屬性無法確定其唯一性,可以用and連接多個屬性去確定
find_element_by_xpath("//input[@id='kw' and @name='wd']")
通過css定位
一般class是用.標記,id是用#標記,標簽名直接寫具體標簽名就好
find_element_by_css_selector("#su")
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector("[name=wd]")
css定位里面也可以通過屬性或者組合方式定位:
find_element_by_css_selector("input[autocomplete='off']")
find_element_by_css_selector("span.bg.s_btn_wr>input#su")
具體說一下百度一下那個按鈕的組合定位方式,這樣寫的定位順序是這樣的,先定位到一個class名為bg s_btn_wr的span標簽,在這個標簽下面有一個id為su的input標簽,這樣就定位到了
值得注意的是,在css里面下級標簽元素用>連接,如果class里面有空格,空格用.進行連接。
find_element_by_link_text()
find_element_by_partial_link_text()
這兩種定位方式是專門用於定位超鏈接的,也就是對應html頁面中的<a>標簽,括號里傳的值就是a標簽中的超鏈接文字,兩者的區別在於一個是完整的超鏈接文字,一個是可以只寫部分超鏈接文字。
比如點擊百度首頁中右上角的新聞超鏈接,可以這樣去定位:
driver.find_element_by_link_text("新聞").click()
driver.find_element_by_partial_link_text("聞").click()
elements復數定位
在上面的例舉的八中基本定位方式種,都有對應的復數形式,分別是下面:
id復數定位find_elements_by_id()
name復數定位find_elements_by_name()
這些復數定位方式每次取到的都是具有相同類型屬性的一組元素,所以返回的是一個list隊列,我們也可以利用這個去定位單個的元素。比如百度首頁種,右上角有新聞、視頻、地圖、貼吧等一些鏈接,我們通過f12查看源碼可以發現,這些鏈接都有共同的class, class="mnav"。


舉個例子,比如定位排在第六個的學術,可以這樣定位:driver.find_elements_by_class_name("mnav")[5].click()