title: 關(guān)于Xpath地址的分析小結(jié)
date: 2016-09-19 20:20:28
tags:
簡介: 發(fā)現(xiàn)有時候遇到xpath的路徑報錯,然而使用的都是一些插件工具,但不同瀏覽器和不同插件得到的xpath又有所差別,故做一個測試記錄
1、旁引: 因故裝python 3 +2 的雙蛇系統(tǒng),是故再次要把a(bǔ)naconda配置到python 2 去然后搜網(wǎng)址的時候,看到一個評論,喜感,記錄如下:
問:anaconda與python什么關(guān)系
答復(fù):
python 是莽蛇,一般是陸上蛇
Anaconda 是美洲大水蛇。
是不是可以寫一部: 水與火之歌 :)
2、以豆瓣網(wǎng)電影板塊的“熱門”按鍵為例,如圖:
在chrome里的xpath是:
//*[@id="gaia_frm"]/div[1]/div[1]/label[1]
在firefox 的firebug插件::
/html/body/div[3]/div[1]/div/div[2]/div[4]/div[2]/div[1]/form/div[1]/div[1]/label[1]
而firexfox的xpath checker插件則是:
id('gaia_frm')/x:div[1]/x:div[1]/x:label[1]
又測試QQ瀏覽器為:
//*[@id="gaia_frm"]/div[1]/div[1]/label[1]
可以發(fā)現(xiàn),谷歌和qq瀏覽器的格式一致,但firefox的插件,則不盡相同,但最起碼,倒過來看,還是基本相同,這其實是路徑開頭選擇差異導(dǎo)致的,而到路徑最后基本都一樣,這可以理解為絕對路徑和相對路徑,前者最開始一個斜杠,后者2個斜杠。那即便后面就肯定一樣?但還要看“后面”的層級定義,即便到達(dá)最后一級的標(biāo)簽,采用的是什么屬性定位,比如通過id,通過name等的區(qū)別。
-
其中,firefox的xpath checker插件顯示的比較特別,帶有X: 字樣,估計是該插件自定義的xpath格式,但如果直接復(fù)制到python里,是不識別的,因此會報錯。所以,如果要采用他的格式,需要把x: 給刪掉。測試就通過了。也就是要修改成:
driver.find_element_by_xpath("id('gaia_frm')/div[1]/div[1]/label[1]")
-
谷歌和qq的一樣,只需要測試一個,結(jié)論直接通過:
driver.find_element_by_xpath("http://*[@id="gaia_frm"]/div[1]/div[1]/label[1]")
-
firebug的,結(jié)論通過:
driver.find_element_by_xpath("/html/body/div[3]/div[1]/div/div[2]/div[4]/div[2]/div[1]/form/div[1]/div[1]/label[1]"
結(jié)論:
- 谷歌和qq瀏覽器自帶的xpath路徑分析,可通過常規(guī)需求的測試(由于有隱藏元素的一些網(wǎng)頁功能,遇到的話依然可能失敗,還有就是動態(tài)刷新技術(shù))
- 由于我安裝的firefox沒看到自帶的xpath分析功能,所以安裝了firebug插件以及xpath checker插件,但xpath checker插件自帶的格式卻得不到瀏覽器的支持,需要特別注意。
- xpath checker在反向驗證xpath路徑的時候還是有用。
關(guān)于最后一點展開下,也是經(jīng)驗總結(jié):
比如,你看別人的代碼分析,因為你不確定他是使用瀏覽器自帶的,還是自己定義的,還是插件的xpath路徑,甚至可能對方根本沒有任何注釋,導(dǎo)致你看到xpath路徑的時候,一頭的暈,丫到底寫的是啥呀?也許聰明的你會說,那可以到網(wǎng)頁源代碼查找一部分的關(guān)鍵詞,確實可以,但也麻煩,舉例來說:
driver_item.find_element_by_xpath("http://div[@class='list-wp']/a[@class='more']").click()
雖然可以知道要點擊一個含有class='more'的控件元素,但你會發(fā)現(xiàn)直接網(wǎng)頁源代碼木有??! 為何? 因為他的真實是雙引號class="more"
原來,因為selenium 的find_element_by_xpath("XXX") 命令,如果你把XXX用class="more"直接代替,絕對的報錯,為何,因為雙引號沖突, 你可以反斜杠來區(qū)分,抑或用單引號,這就是原因所在??梢姡幢隳愕骄W(wǎng)頁源代碼查找還是麻煩的很,更不要說,如果萬一源代碼里有好幾個這樣的查找單元了。
而我們用,xpath checker反向驗證,可以很快的讓你知道,對方分析的是什么元素,如下圖: