最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中Selenium最常用的八大元素定位的實(shí)戰(zhàn)指南

 更新時(shí)間:2025年10月16日 09:16:27   作者:成成成成成成果  
在 Selenium 自動(dòng)化測(cè)試中,元素定位是核心基礎(chǔ),本文將系統(tǒng)講解 Selenium 最常用的八大元素定位方法,結(jié)合圖標(biāo)、實(shí)戰(zhàn)代碼和對(duì)比圖表,幫你快速掌握定位技巧

在 Selenium 自動(dòng)化測(cè)試中,元素定位是核心基礎(chǔ)—— 只有精準(zhǔn)找到頁(yè)面上的目標(biāo)元素(如按鈕、輸入框、鏈接等),才能執(zhí)行后續(xù)的點(diǎn)擊、輸入、獲取文本等操作。本文將系統(tǒng)講解 Selenium 最常用的八大元素定位方法,結(jié)合圖標(biāo)、實(shí)戰(zhàn)代碼和對(duì)比圖表,幫你快速掌握定位技巧。

一、元素定位的核心邏輯

頁(yè)面中的每個(gè) HTML 元素都有獨(dú)特的 “身份標(biāo)識(shí)”(如 ID、類(lèi)名、標(biāo)簽名等),Selenium 通過(guò)這些標(biāo)識(shí)在 DOM(文檔對(duì)象模型)中匹配目標(biāo)元素。其核心邏輯可概括為:

定位策略 → 匹配規(guī)則 → 找到元素 → 執(zhí)行操作

為了更直觀理解,我們先看一個(gè)簡(jiǎn)單的 HTML 元素示例,后續(xù)代碼將基于此元素展開(kāi):

<!-- 示例元素:一個(gè)登錄按鈕 -->

<button id="loginBtn" class="btn primary-btn" name="submit" value="login"

onclick="submitForm()">登錄</button>

二、八大元素定位方法詳解

Selenium 提供了 8 種定位方法,對(duì)應(yīng)find_element(By.XXX, value)中的By類(lèi)屬性。以下按 “常用程度 + 定位精度” 排序講解,每種方法均包含定位原理圖標(biāo)、代碼示例適用場(chǎng)景

1. ID 定位(By.ID)

原理

通過(guò)元素的id屬性定位,ID 在頁(yè)面中通常是唯一的(規(guī)范的前端開(kāi)發(fā)會(huì)保證 ID 唯一性),是優(yōu)先級(jí)最高的定位方式。

代碼示例

from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化瀏覽器
driver = webdriver.Chrome()
driver.get("https://example.com/login")
# 通過(guò)ID定位登錄按鈕并點(diǎn)擊
login_btn = driver.find_element(By.ID, "loginBtn") # value為元素的id屬性值
login_btn.click()
# 關(guān)閉瀏覽器
driver.quit()

適用場(chǎng)景

  • 元素有明確且唯一的id屬性(如登錄按鈕、核心輸入框);
  • 追求最高定位效率和穩(wěn)定性時(shí)優(yōu)先使用。

2. 名稱(chēng)定位(By.NAME)

原理

通過(guò)元素的name屬性定位,name常用于表單元素(如輸入框),但可能不唯一。

代碼示例

# 定位用戶(hù)名輸入框并輸入內(nèi)容
username_input = driver.find_element(By.NAME, "username") # value為元素的name屬性值
username_input.send_keys("test_user")
# 定位密碼輸入框并輸入內(nèi)容
password_input = driver.find_element(By.NAME, "password")
password_input.send_keys("123456")

適用場(chǎng)景

  • 元素有name屬性(常見(jiàn)于表單元素如輸入框、單選框);
  • 當(dāng) ID 不存在但 name 存在時(shí)使用,需注意 name 可能重復(fù)(重復(fù)時(shí)需結(jié)合其他策略)。

3. 類(lèi)名定位(By.CLASS_NAME)

原理

通過(guò)元素的class屬性定位,class用于定義元素樣式,可能對(duì)應(yīng)多個(gè)元素(同一類(lèi)樣式的元素)。

代碼示例

# 定位所有“主要按鈕”(假設(shè)class="primary-btn"對(duì)應(yīng)多個(gè)按鈕)
primary_btns = driver.find_elements(By.CLASS_NAME, "primary-btn") # 注意是find_elements(復(fù)數(shù))
# 遍歷所有主要按鈕,找到“登錄”按鈕并點(diǎn)擊
for btn in primary_btns:
if btn.text == "登錄":
btn.click()
break

適用場(chǎng)景

  • 元素有class屬性,且需要批量定位同一類(lèi)元素(如列表項(xiàng)、表格行);
  • 注意:class屬性值若包含空格(如class="btn primary-btn"),需拆分取單個(gè)類(lèi)名(如用"btn"或"primary-btn")。

4. 標(biāo)簽名定位(By.TAG_NAME)

原理

通過(guò) HTML 標(biāo)簽名(如button、input、a)定位,標(biāo)簽名通常對(duì)應(yīng)大量元素(如頁(yè)面中所有按鈕都是<button>標(biāo)簽)。

代碼示例

# 定位頁(yè)面中所有按鈕,統(tǒng)計(jì)按鈕數(shù)量
all_buttons = driver.find_elements(By.TAG_NAME, "button")
print(f"頁(yè)面中共有 {len(all_buttons)} 個(gè)按鈕")
# 定位頁(yè)面中唯一的<input type="submit">標(biāo)簽并點(diǎn)擊
submit_input = driver.find_element(By.TAG_NAME, "input")
if submit_input.get_attribute("type") == "submit":
submit_input.click()

適用場(chǎng)景

  • 頁(yè)面中某類(lèi)標(biāo)簽唯一(如唯一的<form>標(biāo)簽);
  • 需要批量統(tǒng)計(jì)或操作同一標(biāo)簽的元素(如統(tǒng)計(jì)所有<a>鏈接)。

5. 鏈接文本定位(By.LINK_TEXT)

原理

通過(guò)超鏈接(<a>標(biāo)簽)的完整文本內(nèi)容定位,僅適用于<a>標(biāo)簽。

代碼示例

# 定位文本為“忘記密碼?”的鏈接并點(diǎn)擊
forgot_pwd_link = driver.find_element(By.LINK_TEXT, "忘記密碼?") # value為完整鏈接文本
forgot_pwd_link.click()

適用場(chǎng)景

  • 元素是<a>標(biāo)簽(超鏈接);
  • 鏈接文本完整且唯一(如 “幫助中心”“退出登錄” 鏈接)。

6. 部分鏈接文本定位(By.PARTIAL_LINK_TEXT)

原理

通過(guò)超鏈接(<a>標(biāo)簽)的部分文本內(nèi)容定位,適用于鏈接文本較長(zhǎng)或部分固定的場(chǎng)景。

代碼示例

# 定位包含“忘記”文本的鏈接(如“忘記密碼?”“忘記賬號(hào)?”)
forgot_link = driver.find_element(By.PARTIAL_LINK_TEXT, "忘記") # value為部分鏈接文本
forgot_link.click()

適用場(chǎng)景

  • 鏈接文本較長(zhǎng)(如 “點(diǎn)擊查看用戶(hù)協(xié)議和隱私政策”),只需匹配部分文本;
  • 鏈接文本部分固定(如 “2024 年度報(bào)告”“2025 年度報(bào)告”,可通過(guò) “年度報(bào)告” 定位)。

7. XPath 定位(By.XPATH)

原理

XPath 是一種在 XML/HTML 文檔中查找元素的語(yǔ)言,支持復(fù)雜的路徑和條件匹配,幾乎能定位所有元素,是最靈活的定位方式。

常用 XPath 語(yǔ)法與代碼示例

XPath 類(lèi)型語(yǔ)法示例說(shuō)明
絕對(duì)路徑/html/body/div[1]/button從根節(jié)點(diǎn)開(kāi)始,易受頁(yè)面結(jié)構(gòu)變化影響
相對(duì)路徑(推薦)//button[@id="loginBtn"]從任意節(jié)點(diǎn)開(kāi)始,通過(guò)屬性匹配
文本匹配//a[text()="忘記密碼?"]通過(guò)元素文本匹配
包含文本//a[contains(text(), "忘記")]通過(guò)部分文本匹配
父節(jié)點(diǎn)定位//input[@name="username"]/..定位輸入框的父節(jié)點(diǎn)
# 1. 相對(duì)路徑+ID定位登錄按鈕
login_btn_xpath1 = driver.find_element(By.XPATH, "http://button[@id='loginBtn']")
# 2. 相對(duì)路徑+文本定位鏈接
forgot_pwd_xpath = driver.find_element(By.XPATH, "http://a[text()='忘記密碼?']")
# 3. 相對(duì)路徑+包含屬性定位輸入框(匹配name包含“user”的輸入框)
user_input_xpath = driver.find_element(By.XPATH, "http://input[contains(@name, 'user')]")
# 4. 定位父節(jié)點(diǎn)下的子元素(定位class為“form-group”的div下的第一個(gè)input)
form_input_xpath = driver.find_element(By.XPATH, "http://div[@class='form-group']/input[1]")

適用場(chǎng)景

  • 元素?zé)o ID、name 等簡(jiǎn)單屬性,或?qū)傩詣?dòng)態(tài)變化(如隨機(jī)生成的 ID);
  • 需要復(fù)雜條件定位(如 “父元素下的第三個(gè)子元素”“文本包含某關(guān)鍵詞的元素”);
  • 跨層級(jí)、跨標(biāo)簽定位時(shí)(如從表格行定位表格外的按鈕)。

8. CSS 選擇器定位(By.CSS_SELECTOR)

原理

CSS 選擇器是用于選擇 HTML 元素的模式,定位效率比 XPath 更高,語(yǔ)法簡(jiǎn)潔,也是常用的靈活定位方式。

常用 CSS 語(yǔ)法與代碼示例

CSS 選擇器類(lèi)型語(yǔ)法示例說(shuō)明
ID 選擇器#loginBtn匹配 id="loginBtn" 的元素
類(lèi)選擇器.primary-btn匹配 class="primary-btn" 的元素
標(biāo)簽選擇器button匹配所有標(biāo)簽
屬性選擇器input[name='username']匹配 name="username" 的元素
包含屬性input[name*='user']匹配 name 包含 “user” 的元素
子元素選擇器div.form-group > input匹配 div(class="form-group")的直接子
# 1. ID選擇器定位登錄按鈕
login_btn_css1 = driver.find_element(By.CSS_SELECTOR, "#loginBtn")
# 2. 類(lèi)選擇器定位主要按鈕
primary_btn_css = driver.find_element(By.CSS_SELECTOR, ".primary-btn")
# 3. 屬性選擇器定位用戶(hù)名輸入框
username_input_css = driver.find_element(By.CSS_SELECTOR, "input[name='username']")
# 4. 子元素選擇器定位表單輸入框
form_input_css = driver.find_element(By.CSS_SELECTOR, "div.form-group > input")
# 5. 包含屬性定位密碼輸入框(name包含“pass”)
password_input_css = driver.find_element(By.CSS_SELECTOR, "input[name*='pass']")

適用場(chǎng)景

  • 追求定位效率(CSS 選擇器比 XPath 更快);
  • 熟悉 CSS 語(yǔ)法,需要簡(jiǎn)潔的靈活定位;
  • 部分場(chǎng)景下 CSS 語(yǔ)法比 XPath 更簡(jiǎn)潔(如 ID、類(lèi)選擇器)。

三、八大定位方法對(duì)比圖表

為了幫你快速選擇合適的定位方法,以下是八大方法的核心維度對(duì)比:

定位方法定位依據(jù)唯一性靈活性效率適用場(chǎng)景
By.IDid 屬性最高元素有唯一 ID
By.NAMEname 屬性表單元素(輸入框、單選框)
By.CLASS_NAMEclass 屬性批量定位同一類(lèi)樣式元素
By.TAG_NAMEHTML 標(biāo)簽名最低批量定位同一標(biāo)簽元素(如按鈕、鏈接)
By.LINK_TEXT標(biāo)簽完整文本超鏈接文本完整且唯一
By.PARTIAL_LINK_TEXT標(biāo)簽部分文本超鏈接文本較長(zhǎng)或部分固定
By.XPATH路徑 / 條件可高可低最高復(fù)雜定位(無(wú)簡(jiǎn)單屬性、動(dòng)態(tài)元素)
By.CSS_SELECTORCSS 選擇器可高可低較高追求效率的靈活定位

四、定位技巧與避坑指南

優(yōu)先選擇穩(wěn)定的定位方式:ID > NAME > CLASS_NAME > XPath/CSS(當(dāng)簡(jiǎn)單屬性存在時(shí),優(yōu)先用前三者,減少維護(hù)成本);

避免絕對(duì)路徑:XPath 的絕對(duì)路徑(如/html/body/div[1])易受頁(yè)面結(jié)構(gòu)變化影響,推薦用相對(duì)路徑;

處理動(dòng)態(tài)屬性:若元素屬性(如 ID)隨機(jī)生成(如loginBtn_12345),用 XPath/CSS 的 “包含” 語(yǔ)法(contains(@id, 'loginBtn'));

區(qū)分單數(shù)與復(fù)數(shù):find_element()返回單個(gè)元素(找不到會(huì)報(bào)錯(cuò)),find_elements()返回元素列表(找不到返回空列表);

工具輔助定位:用瀏覽器開(kāi)發(fā)者工具(F12)的 “元素” 面板,右鍵元素可直接復(fù)制 XPath/CSS 選擇器(需注意驗(yàn)證有效性)。

總結(jié)

Selenium 八大元素定位方法各有優(yōu)劣,實(shí)際測(cè)試中需根據(jù)元素屬性、頁(yè)面結(jié)構(gòu)和穩(wěn)定性需求選擇:

  • 簡(jiǎn)單場(chǎng)景:優(yōu)先用 ID、NAME(高效穩(wěn)定);
  • 批量操作:用 CLASS_NAME、TAG_NAME;
  • 鏈接定位:用 LINK_TEXT、PARTIAL_LINK_TEXT;
  • 復(fù)雜場(chǎng)景:用 XPath(靈活)或 CSS_SELECTOR(高效)。

掌握這些定位方法,再結(jié)合實(shí)際項(xiàng)目中的調(diào)試經(jīng)驗(yàn),就能輕松應(yīng)對(duì)大多數(shù) Selenium 自動(dòng)化測(cè)試的元素定位需求!

到此這篇關(guān)于Python中Selenium最常用的八大元素定位的實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Selenium元素定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)錄制全屏和選擇區(qū)域錄屏功能

    python實(shí)現(xiàn)錄制全屏和選擇區(qū)域錄屏功能

    這篇文章主要介紹了python實(shí)現(xiàn)錄制全屏和選擇區(qū)域錄屏功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 將Django項(xiàng)目部署到CentOs服務(wù)器中

    將Django項(xiàng)目部署到CentOs服務(wù)器中

    今天小編就為大家分享一篇關(guān)于將Django項(xiàng)目部署到CentOs服務(wù)器中的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • pyEcharts安裝及詳細(xì)使用指南(最新)

    pyEcharts安裝及詳細(xì)使用指南(最新)

    這篇文章主要介紹了pyEcharts安裝及詳細(xì)使用指南(最新),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談ROC曲線的最佳閾值如何選取

    淺談ROC曲線的最佳閾值如何選取

    今天小編就為大家分享一篇淺談ROC曲線的最佳閾值如何選取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python實(shí)現(xiàn)接口自動(dòng)化封裝導(dǎo)出excel和讀寫(xiě)excel數(shù)據(jù)

    Python實(shí)現(xiàn)接口自動(dòng)化封裝導(dǎo)出excel和讀寫(xiě)excel數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)接口自動(dòng)化封裝導(dǎo)出excel和讀寫(xiě)excel數(shù)據(jù),文中的示例代碼簡(jiǎn)潔易懂,希望對(duì)大家有所幫助
    2023-07-07
  • pytest+allure環(huán)境搭建+自動(dòng)化實(shí)踐過(guò)程

    pytest+allure環(huán)境搭建+自動(dòng)化實(shí)踐過(guò)程

    這篇文章主要介紹了pytest+allure環(huán)境搭建+自動(dòng)化實(shí)踐過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Eclipse + Python 的安裝與配置流程

    Eclipse + Python 的安裝與配置流程

    Eclipse的安裝是很容易的。Eclipse是基于java的一個(gè)應(yīng)用程序,因此需要一個(gè)java的運(yùn)行環(huán)境(JRE)才行。(我這里主要介紹windows下的安裝)
    2013-03-03
  • 基于Python實(shí)現(xiàn)船舶的MMSI的獲取(推薦)

    基于Python實(shí)現(xiàn)船舶的MMSI的獲取(推薦)

    工作中遇到一個(gè)需求,需要通過(guò)網(wǎng)站查詢(xún)船舶名稱(chēng)得到MMSI碼,網(wǎng)站來(lái)自船訊網(wǎng)。這篇文章主要介紹了基于Python實(shí)現(xiàn)船舶的MMSI的獲取,需要的朋友可以參考下
    2019-10-10
  • Mac安裝python3的方法步驟

    Mac安裝python3的方法步驟

    這篇文章主要介紹了Mac安裝python3的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • tensorflow實(shí)現(xiàn)二維平面模擬三維數(shù)據(jù)教程

    tensorflow實(shí)現(xiàn)二維平面模擬三維數(shù)據(jù)教程

    今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)二維平面模擬三維數(shù)據(jù)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02

最新評(píng)論

东兴市| 江华| 类乌齐县| 安西县| 克拉玛依市| 文登市| 印江| 延庆县| 德江县| 屏东县| 滨海县| 桦甸市| 滁州市| 新巴尔虎左旗| 柳河县| 余江县| 临洮县| 磴口县| 托里县| 南澳县| 赤城县| 泗阳县| 垣曲县| 济源市| 汽车| 越西县| 乌兰察布市| 连城县| 临武县| 宣武区| 镇安县| 鄂尔多斯市| 华阴市| 元阳县| 新竹县| 长海县| 土默特右旗| 新源县| 河间市| 和田市| 辰溪县|