這一節,我們介紹一下頁面元素定位的八種方式和如何通過火狐和谷歌瀏覽器獲取元素定位信息.
頁面元素的定位方法
html頁面是有一個個的標簽組成的,我們定位元素其實就是定位這些標簽。
首先來看一下有哪兒幾種定位方式:
id
name
class name
tag name
link text
partial link text
xpath
css selector
一共八種定位方式,其實常用的定位方式也有:xpath、css selector,至少要熟練掌握一種......
第1種-ID定位
from selenium import webdriver driver =webdriver.Chrome() driver.get("https://tieba.baidu.com/") driver.find_element_by_id("wd1").send_keys("python")
id定位
代碼的意思就是定位id為:“wd1”的輸入框並輸入了“python”這個數據

<input id="wd1" class="search_ipt search_inp_border j_search_input tb_header_search_input" name="kw1" value="" autocomplete="off" size="42" tabindex="1" maxlength="100" x-webkit-grammar="builtin:search" x-webkit-speech="true" type="text">
第2種-name定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_name("kw1").send_keys("python")
我們通過觀察這個<input>標簽的屬性,通過name也可以成功定位這個元素
第3種-class name定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_class_name("search_ipt.search_inp_border.j_search_input.tb_header_search_input").send_keys("python")
結果我們發現系統報錯了,由於這個輸入框的class中有四個class,
所以當我們同點來分割時,報錯:Unable to locate element:;當我們用空格分割時,報錯: Compound class names not permitted
而當我們用其中一個class時,比如:search_ipt
這時我們才可以成功的定位元素(一般不建議用這個class name來定位)
第4種-Tag name定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_tag_name("input").send_keys("python")
我們直接定位這個元素的標簽名,可以成功定位,但是由於實際中tag name有很多相同的標簽,可能會在運行時定位不准確,所以不建議使用這個
第5種-Link text定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_link_text("地圖").click()
然后我們通過鏈接的名字找到元素,並進行click()點擊操作,進入到了地圖頁
第6種:Partial link text定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_partial_link_text("地").click()
同樣的,我們通過鏈接的部分文字信息來定位到這個元素,依舊可以成功定位
第7種-Xpath定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_xpath(".//*[@id='wd1']").send_keys("python")
xpath定位
xpath是比較常用的定位,由於定位比較准確,一般是百發百中,但是缺點是絕對路徑的xpath根據元素標簽的相對位置來定位,如果頁面的UI元素有所改動,結構路徑變化的話,也會導致我們無法定位元素,不過這是針對我們用firepath自動獲取時的定位,我們完全可以根據層級關系和元素屬性自己來寫xpath路徑,這樣的話,即使其他路徑結構變化,對於xpath定位的准確度還有一定的保障
比如:
1.我們把xpath的父級路徑添加上
//form/input[@id='wd1']
2.我們還可以對所查找元素標簽里的屬性進行組合
//form/input[@id='wd1' and @name='kw1']
3.我們對文本進行匹配
driver.find_element_by_xpath("//*[contains(text(),'網頁')]").click()
可以看出xpath簡直是神器啊,有沒有,可以通過標簽的各種屬性來定位,等於說是包含了class name、name、id、link_text這些定位的方法。
第8種-CSS Selector定位
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
driver.find_element_by_css_selector("#wd1").send_keys("python")
通過css selector 定位
其實這個css selector定位的強悍和xpath不相上下,也非常之強大,比如在css selector里:
我用class來定位:driver.find_element_by_css_selector(".search_ipt")
用id來定位:driver.find_element_by_css_selector("#wd1")
用標簽名來定位(tag name):driver.find_element_by_css_selector("input")
用父子關系來定位:driver.find_element_by_css_selector("form>input")
用標簽和屬性來定位:driver.find_element_by_css_selector("input[id='wd1']")
以及綜合上邊的超級組合查詢:driver.find_element_by_css_selector("form.clearfix>input[id='wd1']") #代表着class為clearfix的父級標簽和自己id屬性為wd1的input標簽.
這些就是定位元素的方法,很常用也非常重要,值得收藏!
