title: 關(guān)于Xpath地址的分析小結(jié)
date: 2016-09-19 20:20:28
tags:
簡(jiǎn)介: 發(fā)現(xiàn)有時(shí)候遇到xpath的路徑報(bào)錯(cuò)刻获,然而使用的都是一些插件工具,但不同瀏覽器和不同插件得到的xpath又有所差別厚柳,故做一個(gè)測(cè)試記錄
1沐兵、旁引: 因故裝python 3 +2 的雙蛇系統(tǒng)别垮,是故再次要把a(bǔ)naconda配置到python 2 去然后搜網(wǎng)址的時(shí)候宰闰,看到一個(gè)評(pí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]
又測(cè)試QQ瀏覽器為:
//*[@id="gaia_frm"]/div[1]/div[1]/label[1]
可以發(fā)現(xiàn)胶背,谷歌和qq瀏覽器的格式一致巷嚣,但firefox的插件,則不盡相同钳吟,但最起碼廷粒,倒過(guò)來(lái)看,還是基本相同,這其實(shí)是路徑開頭選擇差異導(dǎo)致的坝茎,而到路徑最后基本都一樣涤姊,這可以理解為絕對(duì)路徑和相對(duì)路徑,前者最開始一個(gè)斜杠嗤放,后者2個(gè)斜杠思喊。那即便后面就肯定一樣?但還要看“后面”的層級(jí)定義次酌,即便到達(dá)最后一級(jí)的標(biāo)簽恨课,采用的是什么屬性定位,比如通過(guò)id岳服,通過(guò)name等的區(qū)別庄呈。
-
其中,firefox的xpath checker插件顯示的比較特別派阱,帶有X: 字樣诬留,估計(jì)是該插件自定義的xpath格式,但如果直接復(fù)制到python里贫母,是不識(shí)別的文兑,因此會(huì)報(bào)錯(cuò)。所以绿贞,如果要采用他的格式籍铁,需要把x: 給刪掉拒名。測(cè)試就通過(guò)了增显。也就是要修改成:
driver.find_element_by_xpath("id('gaia_frm')/div[1]/div[1]/label[1]")
-
谷歌和qq的一樣同云,只需要測(cè)試一個(gè)炸站,結(jié)論直接通過(guò):
driver.find_element_by_xpath("http://*[@id="gaia_frm"]/div[1]/div[1]/label[1]")
-
firebug的,結(jié)論通過(guò):
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ò)常規(guī)需求的測(cè)試(由于有隱藏元素的一些網(wǎng)頁(yè)功能全释,遇到的話依然可能失敗妄迁,還有就是動(dòng)態(tài)刷新技術(shù))
- 由于我安裝的firefox沒看到自帶的xpath分析功能李命,所以安裝了firebug插件以及xpath checker插件黔州,但xpath checker插件自帶的格式卻得不到瀏覽器的支持流妻,需要特別注意绅这。
- xpath checker在反向驗(yàn)證xpath路徑的時(shí)候還是有用证薇。
關(guān)于最后一點(diǎn)展開下浑度,也是經(jīng)驗(yàn)總結(jié):
比如,你看別人的代碼分析,因?yàn)槟悴淮_定他是使用瀏覽器自帶的谨设,還是自己定義的扎拣,還是插件的xpath路徑誉券,甚至可能對(duì)方根本沒有任何注釋刊愚,導(dǎo)致你看到xpath路徑的時(shí)候商玫,一頭的暈牡借,丫到底寫的是啥呀炬藤?也許聰明的你會(huì)說(shuō)刻像,那可以到網(wǎng)頁(yè)源代碼查找一部分的關(guān)鍵詞,確實(shí)可以帝火,但也麻煩蠢壹,舉例來(lái)說(shuō):
driver_item.find_element_by_xpath("http://div[@class='list-wp']/a[@class='more']").click()
雖然可以知道要點(diǎn)擊一個(gè)含有class='more'的控件元素图贸,但你會(huì)發(fā)現(xiàn)直接網(wǎng)頁(yè)源代碼木有!沟优! 為何挠阁? 因?yàn)樗恼鎸?shí)是雙引號(hào)class="more"
原來(lái)锨用,因?yàn)閟elenium 的find_element_by_xpath("XXX") 命令增拥,如果你把XXX用class="more"直接代替,絕對(duì)的報(bào)錯(cuò)熄求,為何忘衍,因?yàn)殡p引號(hào)沖突, 你可以反斜杠來(lái)區(qū)分搀捷,抑或用單引號(hào),這就是原因所在家厌》褂冢可見,即便你到網(wǎng)頁(yè)源代碼查找還是麻煩的很木西,更不要說(shuō),如果萬(wàn)一源代碼里有好幾個(gè)這樣的查找單元了。
而我們用照皆,xpath checker反向驗(yàn)證愤钾,可以很快的讓你知道杂瘸,對(duì)方分析的是什么元素镜硕,如下圖: