欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、元素定位的核心邏輯

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

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

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

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

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

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

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

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

1. ID 定位(By.ID)

原理

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

代碼示例

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

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

適用場景

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

2. 名稱定位(By.NAME)

原理

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

代碼示例

# 定位用戶名輸入框并輸入內(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")

適用場景

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

3. 類名定位(By.CLASS_NAME)

原理

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

代碼示例

# 定位所有“主要按鈕”(假設(shè)class="primary-btn"對應(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

適用場景

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

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

原理

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

代碼示例

# 定位頁面中所有按鈕,統(tǒng)計(jì)按鈕數(shù)量
all_buttons = driver.find_elements(By.TAG_NAME, "button")
print(f"頁面中共有 {len(all_buttons)} 個(gè)按鈕")
# 定位頁面中唯一的<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()

適用場景

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

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

原理

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

代碼示例

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

適用場景

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

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

原理

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

代碼示例

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

適用場景

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

7. XPath 定位(By.XPATH)

原理

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

常用 XPath 語法與代碼示例

XPath 類型語法示例說明
絕對路徑/html/body/div[1]/button從根節(jié)點(diǎn)開始,易受頁面結(jié)構(gòu)變化影響
相對路徑(推薦)//button[@id="loginBtn"]從任意節(jié)點(diǎn)開始,通過屬性匹配
文本匹配//a[text()="忘記密碼?"]通過元素文本匹配
包含文本//a[contains(text(), "忘記")]通過部分文本匹配
父節(jié)點(diǎn)定位//input[@name="username"]/..定位輸入框的父節(jié)點(diǎn)
# 1. 相對路徑+ID定位登錄按鈕
login_btn_xpath1 = driver.find_element(By.XPATH, "http://button[@id='loginBtn']")
# 2. 相對路徑+文本定位鏈接
forgot_pwd_xpath = driver.find_element(By.XPATH, "http://a[text()='忘記密碼?']")
# 3. 相對路徑+包含屬性定位輸入框(匹配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]")

適用場景

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

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

原理

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

常用 CSS 語法與代碼示例

CSS 選擇器類型語法示例說明
ID 選擇器#loginBtn匹配 id="loginBtn" 的元素
類選擇器.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. 類選擇器定位主要按鈕
primary_btn_css = driver.find_element(By.CSS_SELECTOR, ".primary-btn")
# 3. 屬性選擇器定位用戶名輸入框
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']")

適用場景

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

三、八大定位方法對比圖表

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

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

四、定位技巧與避坑指南

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

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

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

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

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

總結(jié)

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

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

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

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

相關(guān)文章

  • Python腳本運(yùn)行正常但nohup報(bào)錯(cuò)的解決方法

    Python腳本運(yùn)行正常但nohup報(bào)錯(cuò)的解決方法

    這篇文章主要為大家詳細(xì)介紹了Python腳本直接運(yùn)行正常但nohup報(bào)錯(cuò)以及解析f-string兼容性問題及解決方案,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Python實(shí)現(xiàn)bilibili時(shí)間長度查詢的示例代碼

    Python實(shí)現(xiàn)bilibili時(shí)間長度查詢的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)bilibili時(shí)間長度查詢的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Scrapy爬蟲Response子類在應(yīng)用中的問題解析

    Scrapy爬蟲Response子類在應(yīng)用中的問題解析

    這篇文章主要為大家介紹了Scrapy爬蟲Response它的子類(TextResponse、HtmlResponse、XmlResponse)在應(yīng)用問題解析
    2023-05-05
  • 微信跳一跳游戲python腳本

    微信跳一跳游戲python腳本

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳游戲python腳本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python集合常見運(yùn)算案例解析

    python集合常見運(yùn)算案例解析

    這篇文章主要介紹了python集合常見運(yùn)算,結(jié)合具體實(shí)例形式分析了Python使用集合生成隨機(jī)數(shù)的幾種常用算法的效率比較,需要的朋友可以參考下
    2019-10-10
  • Python collections.deque雙邊隊(duì)列原理詳解

    Python collections.deque雙邊隊(duì)列原理詳解

    這篇文章主要介紹了Python collections.deque雙邊隊(duì)列原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python多線程抽象編程模型詳解

    python多線程抽象編程模型詳解

    這篇文章主要為大家詳細(xì)介紹了python多線程抽象編程模型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • MATLAB 如何求取離散點(diǎn)的曲率最大值

    MATLAB 如何求取離散點(diǎn)的曲率最大值

    這篇文章主要介紹了MATLAB 求取離散點(diǎn)的曲率最大值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Pandas分組函數(shù)groupby的用法詳解

    Pandas分組函數(shù)groupby的用法詳解

    在數(shù)據(jù)分析時(shí),經(jīng)常需要將數(shù)據(jù)分成不同的群組,pandas中的groupby()函數(shù)可以完美地完成各種分組操作,本文就來介紹一下Pandas分組函數(shù)groupby的用法,感興趣的可以了解一下
    2024-01-01
  • python tkinter圖形界面代碼統(tǒng)計(jì)工具(更新)

    python tkinter圖形界面代碼統(tǒng)計(jì)工具(更新)

    這篇文章主要為大家詳細(xì)介紹了python tkinter圖形界面代碼統(tǒng)計(jì)工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論