一、什么是Xpath
Xpath是在一種在XML文檔里查找信息的語言。
二、Xpath定位元素的幾種方式
1霸株、絕對路徑定位
a = browser.find_element_by_xpath('/html/body/div/div[2]/div/div/div/from/span/input')
絕對路徑定位存在很大的問題就是如果頁面元素一改變元素的xpath也會隨之改變,很不穩(wěn)定集乔,不推薦使用
2去件、標(biāo)簽+屬性定位——xpath = "http://標(biāo)簽名[@屬性='屬性值']"
- 例如,百度首頁的輸入框的xpath就可以表示為
//*[@id="kw"]
扰路,其中*
表示所有的標(biāo)
簽名 - 當(dāng)單一的屬性無法確定到一個元素時尤溜,可以使用組合屬性的方式
例如,百度首頁的輸入框可以表示為//*[@id="kw" and @name="wd"]
- 當(dāng)然汗唱,也可以使用其他的邏輯運算宫莱,比如or、not
3哩罪、text()方法定位
例如授霸,百度首頁的新聞超鏈接的xpath可以表示為//*[text()='新聞']
4、contains()方法定位际插,也叫模糊定位
xpath = "http://標(biāo)簽名[contains(@屬性, '屬性值')]"
例如碘耳,百度首頁的新聞也可以寫成//a[contains(@name,'news')]
只要屬性中包含給出的字符串就可以定位到元素了
5、starts-with 框弛,ends-with方法定位
starts-with -- 匹配以xx開頭的屬性值辛辨;ends-with -- 匹配以xx結(jié)尾的屬性值
//*[starts-with(@value,'百度一')]
可以定位到百度一下按鈕;
但是browser.find_element_by_xpath("http://a[ends-with(@name,'_trnews')]")
定位不到新聞功咒,那是因為ends-with是Xpath2.0的用法愉阎,但是瀏覽器一般通常只支持Xpath1.0
6绞蹦、如果一個元素?zé)o法通過自身的屬性定位到力奋,那么可以先定位到他的上一級或者上N級,然后再一級一級地找到他
例如幽七,定位到百度首頁的輸入框景殷,可以表示成//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input
三、Xpath的優(yōu)缺點
- 缺點
1、性能差猿挚,因為使用這種方式進行定位咐旧,webdriver會將整個頁面的所有元素進行掃描來找到我們所需的元素,所以當(dāng)腳本中大量使用XPath方式定位绩蜻,會大大降低腳本的執(zhí)行速度铣墨。
2、Xpath會隨著頁面的布局的改變而改變办绝,幾乎不能維護 - 優(yōu)點
1伊约、可以做布爾邏輯判斷,例如//*[@id="kw" and @name="wd"]
2孕蝉、可以進行模糊定位屡律,contains(),start-with(),ends-with()等