在爬蟲中,咱們常用xpath來對元素進行定位,xpath定位分爲兩種,一種是絕對定位,/html/body/div[2]/div[1]/div/div[3]/a[7],另一種是相對定位,好比r'//*[@id ='ul' ]/a[7]' css
一般咱們能夠經過開發者工具,複製元素對應的xpath,這種xpath都是絕對定位,方便獲取,可是絕對路徑太長,若是裏面元素被隱藏了或者元素有變更的話,絕對定位就會出錯,就會出現定位不到的狀況。這個時候用相對定位能夠解決這個問題,相對定位更精準,相對定位一般能夠和id或者class-name結合使用。html
方法,咱們能夠將咱們寫的xpath 放到開發者工具裏,看是否是能定位到,若是能定位到,說明不是xpath定位的問題。工具
還有的狀況是頁面幾個元素的xpah如出一轍,這個咱們能夠用下標解決,舉例spa
如今咱們要抓取的是華東地區這個標籤,可是問題是華北中心,華南中心,華東中心的三個標籤的xpah是同樣的。都是//*[@id="common.query_case_list_DW_CDptCdes"] 。這個時候咱們選擇華東中心,能夠經過下標定位,既是3d
//*[@id="common.query_case_list_DW_CDptCdes"][3] 這樣就能夠了。orm
另外看標籤是否選中,還有一個小知識點,就是 is_selected(),若是返回true 則表名被選中,若是返回false ,則表名未被選中htm
browser.find_element_by_xpath('//*[@id="report.report_loss_type_DW_HasGds"]').is_selected()
下面的是一位大神總結的:
什麼是xpath呢?對象
官方介紹:XPath即爲XML路徑語言,它是一種用來肯定XML1(標準通用標記語言3的子集)文檔中某部分位置的語言。反正小編看這個介紹是雲裏霧裏的,通俗一點講就是經過元素的路徑來查找到這個元素的,至關於經過定位一個對象的座標,來找到這個對象。blog
1、xpath:屬性定位索引
2.因而能夠用如下xpath方法定位
2、xpath:其它屬性
1.若是一個元素id、name、class屬性都沒有,這時候也能夠經過其它屬性定位到
3、xpath:標籤
1.有時候同一個屬性,同名的比較多,這時候能夠經過標籤篩選下,定位更準一點
2.若是不想制定標籤名稱,能夠用*號表示任意標籤
3.若是想制定具體某個標籤,就能夠直接寫標籤名稱
4、xpath:層級
1.若是一個元素,它的屬性不是很明顯,沒法直接定位到,這時候咱們能夠先找它老爸(父元素)
2.找到它老爸後,再找下個層級就能定位到了
3.如上圖所示,要定位的是input這個標籤,它的老爸的id=s_kw_wrap.
4.要是它老爸的屬性也不是很明顯,就找它爺爺id=form
5.因而就能夠經過層級關係定位到
5、xpath:索引
1.若是一個元素它的兄弟元素跟它的標籤同樣,這時候沒法經過層級定位到。由於都是一個父親生的,多胞胎兄弟。
2.雖然雙胞胎兄弟很難識別,可是出生是有前後的,因而能夠經過它在家裏的排行老幾定位到。
3.以下圖三胞胎兄弟
4.用xpath定位老大、老二和老三(這裏索引是從1開始算起的,跟Python的索引不同)
6、xpath:邏輯運算
1.xpath還有一個比較強的功能,是能夠多個屬性邏輯運算的,能夠支持與(and)、或(or)、非(not)
2.通常用的比較多的是and運算,同時知足兩個屬性
7、xpath:模糊匹配
1.xpath還有一個很是強大的功能,模糊匹配
2.掌握了模糊匹配功能,基本上沒有定位不到的
3.好比我要定位百度頁面的超連接「hao123」,在上一篇中講過能夠經過by_link,也能夠經過by_partial_link,模糊匹配定位到。固然xpath也能夠有一樣的功能,而且更爲強大。
能夠把xpath當作是元素定位界的屠龍刀。武林至尊,寶刀xpath,css不出,誰與爭鋒?下節課將亮出倚天劍css定位。
原文連接https://www.cnblogs.com/wanghaihong200/p/8461770.html