本篇博客將介紹Xpath和Css兩種元素定位方法
Xpath定位:
Css定位:
XPath即為XML路徑語言,它是一種用來確定XML1(標准通用標記語言3的子集)文檔中某部分位置的語言。反正小編看這個介紹是雲里霧里的,通俗一點講就是通過元素的路徑來查找到這個元素的,相當於通過定位一個對象的坐標,來找到這個對象。
一、xpath:屬性定位
xptah也可以通過元素的id、name、class這些屬性定位,如下圖
1.常用屬性定位
2.如果一個元素id、name、class屬性都沒有,這時候也可以通過其它屬性定位到
1.有時候同一個屬性,同名的比較多,這時候可以通過標簽篩選下,定位更准一點
2.如果不想制定標簽名稱,可以用*號表示任意標簽
3.如果想制定具體某個標簽,就可以直接寫標簽名稱
1.如果一個元素,它的屬性不是很明顯,無法直接定位到,這時候我們可以先找它老爸(父元素)
2.找到它老爸后,再找下個層級就能定位到了
3.如上圖所示,要定位的是input這個標簽,它的老爸的id=s_kw_wrap.
4.要是它老爸的屬性也不是很明顯,就找它爺爺id=form
5.於是就可以通過層級關系定位到
1.如果一個元素它的兄弟元素跟它的標簽一樣,這時候無法通過層級定位到。因為都是一個父親生的,多胞胎兄弟。
2.雖然雙胞胎兄弟很難識別,但是出生是有先后的,於是可以通過它在家里的排行老幾定位到。
3.如下圖三胞胎兄弟
4.用xpath定位老大、老二和老三(這里索引是從1開始算起的,跟Python的索引不一樣)
1.xpath還有一個比較強的功能,是可以多個屬性邏輯運算的,可以支持與(and)、或(or)、非(not)
2.一般用的比較多的是and運算,同時滿足兩個屬性
1.xpath還有一個非常強大的功能,模糊匹配
2.掌握了模糊匹配功能,基本上沒有定位不到的
3.比如我要定位百度頁面的超鏈接“hao123”,在上一篇中講過可以通過by_link,也可以通過by_partial_link,模糊匹配定位到。當然xpath也可以有同樣的功能,並且更為強大。
大部分人在使用selenium定位元素時,用的是xpath定位,因為xpath基本能解決定位的需求。css定位往往被忽略掉了,其實css定位也有它的價值,css定位更快,語法更簡潔。
這一篇css的定位方法,主要是對比上一篇的xpath來的,基本上xpath能完成的,css也可以做到。相對比學習,更容易理解。
一、css:屬性定位
1.css可以通過元素的id、class、標簽這三個常規屬性直接定位到
2.如下是百度輸入框的的html代碼:
<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd"/>
3.css用#號表示id屬性,如:#kw
4.css用.表示class屬性,如:.s_ipt
5.css直接用標簽名稱,無任何標示符,如:input

1.css除了可以通過標簽、class、id這三個常規屬性定位外,也可以通過其它屬性定位
2.以下是定位其它屬性的格式

1.css頁可以通過標簽與屬性的組合來定位元素

1.在前面一篇xpath中講到層級關系定位,這里css也可以達到同樣的效果
2.如xpath://form[@id='form']/span/input和
//form[@class='fm']/span/input也可以用css實現

1.以下圖為例,跟上一篇一樣
2.css也可以通過索引option:nth-child(1)來定位子元素,這點與xpath寫法用很大差異,其實很好理解,直接翻譯過來就是第幾個小孩

1.css同樣也可以實現邏輯運算,同時匹配兩個屬性,這里跟xpath不一樣,無需寫and關鍵字
