關(guān)于Xpath地址的分析小結(jié)


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反向驗證,可以很快的讓你知道,對方分析的是什么元素,如下圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容