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

Python利用XPath的邏輯運算符實現(xiàn)多條件定位

 更新時間:2026年04月23日 09:30:47   作者:detayun  
XPath作為一種強大的定位語言,能夠通過復雜的條件組合精準定位目標元素,本文將結合實際案例,詳細解析如何在Python中利用XPath的邏輯運算符實現(xiàn)多條件定位,希望對大家有所幫助

在Web自動化測試和網(wǎng)頁數(shù)據(jù)抓取中,XPath作為一種強大的定位語言,能夠通過復雜的條件組合精準定位目標元素。當需要同時滿足多個屬性條件或匹配多種可能性時,andor邏輯運算符的組合使用顯得尤為重要。本文將結合實際案例,詳細解析如何在Python中利用XPath的邏輯運算符實現(xiàn)多條件定位。

一、XPath邏輯運算符基礎

XPath提供三種邏輯運算符:

  • and:邏輯與,要求所有條件同時成立
  • or:邏輯或,滿足任一條件即可
  • not:邏輯非,對條件取反

這些運算符需在謂詞(方括號[]內(nèi))中使用,且兩側(cè)必須為布爾表達式(如屬性存在判斷、函數(shù)返回結果等)。

二、and運算符實戰(zhàn):精準匹配多屬性

場景1:同時匹配多個屬性

當需要定位同時具備class="btn"type="submit"的按鈕時,可使用以下表達式:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com/login")

# 使用and組合條件
submit_btn = driver.find_element("xpath", '//button[@class="btn" and @type="submit"]')
submit_btn.click()

場景2:屬性與文本內(nèi)容組合

若需定位class包含"active"且文本為"登錄"的元素:

login_link = driver.find_element("xpath", '//a[contains(@class,"active") and text()="登錄"]')

三、or運算符實戰(zhàn):匹配多種可能性

場景1:多屬性值匹配

當元素可能具有type="text"type="email"時:

input_field = driver.find_element("xpath", '//input[@type="text" or @type="email"]')

場景2:多標簽類型匹配

若需定位<button><a>標簽且文本包含"保存"的元素:

save_element = driver.find_element("xpath", '//button[text()="保存"] | //a[contains(text(),"保存")]')

四、復雜條件組合:括號明確優(yōu)先級

當混合使用andor時,需通過括號明確邏輯分組:

案例:定位百度搜索框

driver.get("https://www.baidu.com")

# 錯誤寫法(易誤解):
# //input[@id and contains(text(),'搜索') or contains(@placeholder,'關鍵詞')]
# 實際等價于: (@id and contains(text(),'搜索')) or contains(@placeholder,'關鍵詞')

# 正確寫法(按意圖分組):
search_box = driver.find_element("xpath", '//input[@id and (contains(text(),"搜索") or contains(@placeholder,"關鍵詞"))]')

更實用的組合示例

定位具有id屬性且(class包含"primary"或type為"submit")的元素:

element = driver.find_element("xpath", '//*[@id and (@class="primary" or @type="submit")]')

五、進階技巧:結合函數(shù)使用

1. 使用contains()實現(xiàn)模糊匹配

# 匹配class包含"btn-"且id以"user_"開頭的元素
elements = driver.find_elements("xpath", '//*[contains(@class,"btn-") and starts-with(@id,"user_")]')

2. 使用not()排除特定條件

# 定位所有可見的input元素(排除disabled的)
inputs = driver.find_elements("xpath", '//input[not(@disabled) and @type!="hidden"]')

六、性能優(yōu)化建議

  1. 優(yōu)先使用唯一屬性:如idname等唯一標識符
  2. 減少層級嵌套:避免過長的路徑表達式(如/html/body/div[3]/...
  3. 使用相對路徑:以//開頭從文檔根搜索
  4. 限制結果范圍:通過(//div)[1]指定索引而非遍歷所有元素

七、完整案例:12306車票查詢

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

driver = webdriver.Chrome()
driver.get("https://kyfw.12306.cn/otn/leftTicket/init")

# 定位出發(fā)站為"北京"且到達站為"上海"的日期選擇器
date_input = driver.find_element(
    "xpath", 
    '//input[@id="date_range" and '
    '((@placeholder="出發(fā)日期" and ancestor::div[contains(@class,"from-station")]) or '
    '(@placeholder="到達日期" and ancestor::div[contains(@class,"to-station")]))]'
)
date_input.click()

總結

XPath的and/or運算符通過布爾邏輯組合條件,能夠解決以下定位難題:

  • 多屬性精確匹配
  • 動態(tài)屬性值處理
  • 復雜頁面結構解析
  • 跨標簽類型定位

掌握這些技巧后,可應對90%以上的元素定位場景。建議通過瀏覽器開發(fā)者工具的$x()函數(shù)實時測試XPath表達式,逐步構建高效穩(wěn)定的定位策略。

到此這篇關于Python利用XPath的邏輯運算符實現(xiàn)多條件定位的文章就介紹到這了,更多相關Python XPath定位內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python合并pdf文件的工具

    Python合并pdf文件的工具

    PDF文件合并工具是非常好用可以把多個pdf文件合并成一個,本文以5個pdf文件為例給大家分享具體操作方法,通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • Python求算數(shù)平方根和約數(shù)的方法匯總

    Python求算數(shù)平方根和約數(shù)的方法匯總

    這篇文章主要介紹了 Python求算數(shù)平方根和約數(shù)的方法匯總的相關資料,需要的朋友可以參考下
    2016-03-03
  • Python PyQt5實戰(zhàn)項目之文件拷貝器的具體實現(xiàn)詳解

    Python PyQt5實戰(zhàn)項目之文件拷貝器的具體實現(xiàn)詳解

    PyQt5以一套Python模塊的形式來實現(xiàn)功能。它包含了超過620個類,600個方法和函數(shù)。本篇文章手把手帶你用PyQt5實現(xiàn)一個簡單的文件拷貝器,大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • Python中的時序分析和可視化案例詳解

    Python中的時序分析和可視化案例詳解

    每個數(shù)據(jù)集都有自己的特征,我們使用它們的特征作為特征來深入了解數(shù)據(jù),在本文中,我們將討論一種重要的數(shù)據(jù)集,即時間序列數(shù)據(jù),感興趣的可以了解下
    2024-02-02
  • python字典操作實例詳解

    python字典操作實例詳解

    這篇文章主要為大家詳細介紹了python字典操作實例的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計

    Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計

    本文主要介紹了Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2023-01-01
  • python實現(xiàn)獲取單向鏈表倒數(shù)第k個結點的值示例

    python實現(xiàn)獲取單向鏈表倒數(shù)第k個結點的值示例

    這篇文章主要介紹了python實現(xiàn)獲取單向鏈表倒數(shù)第k個結點的值,結合實例形式分析了Python針對單向鏈表的定義、遍歷、傳值、判斷等相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • 將keras的h5模型轉(zhuǎn)換為tensorflow的pb模型操作

    將keras的h5模型轉(zhuǎn)換為tensorflow的pb模型操作

    這篇文章主要介紹了將keras的h5模型轉(zhuǎn)換為tensorflow的pb模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Django實現(xiàn)web端tailf日志文件功能及實例詳解

    Django實現(xiàn)web端tailf日志文件功能及實例詳解

    這篇文章主要介紹了Django實現(xiàn)web端tailf日志文件功能,本文通過實例給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 關于python的矩陣乘法運算

    關于python的矩陣乘法運算

    這篇文章主要介紹了關于python的矩陣乘法運算,矩陣是一個數(shù)字陣列,一個二維數(shù)組,n行r列的陣列稱為n*r矩陣。如果n==r則稱為方陣,需要的朋友可以參考下
    2023-04-04

最新評論

三门峡市| 江口县| 屏东市| 扎赉特旗| 杨浦区| 沁阳市| 连江县| 黄平县| 高尔夫| 津南区| 上林县| 丹棱县| 台北县| 澄江县| 玉溪市| 赤峰市| 仙居县| 北安市| 南汇区| 灵川县| 松溪县| 卓资县| 昌江| 綦江县| 禄劝| 铜川市| 和政县| 松溪县| 富平县| 绥芬河市| 安平县| 巩留县| 茶陵县| 双柏县| 渝中区| 天柱县| 景东| 文成县| 汕尾市| 寿宁县| 衡山县|