html 定位 頁面物件定位方法詳解(三)

2021-10-11 09:02:43 字數 2612 閱讀 5178

我們繼續來講下頁面物件的定位方法,本文主要講xpath的定位方法。那麼講xpath之前,我先來說下,為什麼要講xpath定位方法呢,因為很多時候我們要定位的頁面物件會沒有id、name、class等屬性,甚至也無法通過link text的方法定位,所以我們就需要用到xpath,xpath對於所有的物件定位都是適用的!

1、find_element_by_xpath()

我們可以看下xpath原始碼中的唯一args引數,

:args:

- xpath - the xpath locator of the element to find.

複製**

其實我們要傳入的無非就是在dom樹的層級,無非就是在html中的路徑。

在xpath定位過程中一般有兩種方式定位,第一種是絕對路徑,第二種是相對路徑,我們先看絕對路徑。1)絕對路徑定位在講絕對路徑定位之前,我們還是還是一樣,先來看乙個(輸入框)控制項

我們通過頁面**能看出來,dom樹的根節點是html,那麼對於絕對路徑來說就是從根節點開始查詢,然後一層一層讓下走,最終定位到你要定位的控制項。我們要定位的輸入框控制項的頁面xpath路徑是/html/body/div/div/div/form/table/tbody/tr/td/input

此時我們回車後可以看到要定位的輸入框藍色高亮了,對應的頁面**黃色高亮了,證明我們此時寫的xpath是正確的,那麼我們就可以放心去**中寫了。

那麼**如何實現呢?

import time

from selenium import webdriver

driver = webdriver.chrome()

driver.get("")

time.sleep(5)

driver.find_element_by_xpath("/html/body/div/div/div/form/table/tbody/tr/td/input").click()

複製**

但是如果我們所有頁面物件的定位都寫絕對路徑的話,會太複雜,寫起來會太費勁,所有我們得去寫一些優雅的xpath,那麼相對路徑應運而成!!!

2)相對路徑定位在講相對路徑之前我們先說下相對路徑的概念,相對路徑無非就是從中間某個路徑開始查詢起,不從html根節點開始查詢,比如說乙個爺爺有多個兒子,每個兒子也有多個兒子,我們想查詢這個爺爺的某個孫子,用相對路徑的概念就是先查找到這個爺爺的某個兒子然後再去找他的兒子,比如說這個爺爺有個兒子是村官,那麼相對路徑就是從村官的這個兒子查詢起,然後找到他的兒子,而不需要從這個爺爺查詢起!!!

我們再言歸正傳,我們可以看到上圖,還是要定位這個輸入框,但是我們不從html根節點開始查詢了,我們會發現它的某個form上級有id並且id屬性值是scbar_form,那麼我們就可以先定位到

這個form,然後從form開始往下走找到我們要定位的輸入框,需要注意的就是相對路徑的寫法是//開始的,那麼它的路徑就是

//form[@id='scbar_form']/table/tbody/tr/td/input

複製**

那麼**實現就很簡單了:

import time

from selenium import webdriver

driver = webdriver.chrome()

driver.get("")

time.sleep(5)

driver.find_element_by_xpath("//form[@id='scbar_form']/table/tbody/tr/td/input").click()

複製**

但是不一定得是id屬性才行,比如form有autocomplete屬性,那麼我們也可以使用它

//form[@autocomplete='off']/table/tbody/tr/td/input

複製**

但是你@的這個屬性必須是唯一的,不然有可能你的xpath定位到底就不是唯一的頁面物件了,那麼就會導致報錯。

當然,其實我們可以看到這個輸入框本來自身也有很多屬性,其實我們也可以通過xpath直接去定位它

比如://input[@name='srchtxt']

複製**

當然你也可以不寫標籤名稱,可以直接寫對應的屬性值

//*[@name='srchtxt']

複製**

當然如果說name屬性可能再頁面有重複,需要多個屬性and才能確保它唯一,我們xpath也是支援的。

//input[@name='srchtxt' and @value='請輸入搜尋內容']

複製**

如果我們知道某個屬性的屬性值包含什麼內容的話,xpath也可以去寫包含關係的:

//input[contains(@value,'內容')]

複製**

xpath是我們空間定位非常核心的部分,所以這一塊如果想要學習selenium還是要多學習呢!

xpath mysql xpath定位方法詳解

1.xpath較複雜的定位方法 現在要引用id為 j password 的input元素,可以像下面這樣寫 webelement password driver.findelement by.xpath id j login form dl dt input id j password 其中 id ...

HTML頁面底部定位

先帝創業未半,而中道崩殂 今天下三分,益州疲敝,此誠危急存亡之秋也。然侍衛之臣,不懈於內 忠志之士,忘身於外者 蓋追先帝之殊遇,欲報之於陛下也。誠宜開張聖聽,以光先帝遺德,恢弘志士之氣 不宜妄自菲薄,引喻失義,以塞忠諫之路也。宮中府中,俱為一體 陟罰臧否,不宜異同 若有作奸犯科,及為忠善者,宜付有司...

html頁面布局 定位

相對定位 1 相對的是自身原有的位置 2 相對定位移動後,會保留原有位置 可以使用定位占用,但普通寫法時,無法占用 3 不會影響文件流 position relative 開啟該元素的定位 具體的位置 left top 父級 main 子級 box絕對定位 1 脫離當前文件流,使元素 飄 起來,父級...