You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python(Selenium)中用通配符字符串通过XPath选择HTML id?

这情况我太熟了!动态生成的选择器绝对是Selenium自动化里最烦人的坑之一,尤其是只有某个数字在变的场景——完全不用慌,给你几个亲测有效的解决思路:

解决动态选择器(仅数字变化)的实用方案

1. 用XPath的部分匹配语法

如果你的XPath是类似//*[@id="element_123"]这种,其中123每次连接都会变,那直接用contains()或者starts-with()匹配固定部分就好:

  • 比如ID的固定前缀是element_:
    from selenium.webdriver.common.by import By
    
    # 用contains匹配属性包含固定字符串
    element = driver.find_element(By.XPATH, '//*[contains(@id, "element_")]')
    # 或者用starts-with确保前缀完全匹配(更精准)
    element = driver.find_element(By.XPATH, '//*[starts-with(@id, "element_")]')
    

如果是Class里的数字在变(比如class="btn-456-action"),同样可以组合条件匹配:

element = driver.find_element(By.XPATH, '//*[contains(@class, "btn-") and contains(@class, "-action")]')

2. 基于元素的相对定位(最稳定的方案)

与其死磕变化的ID/Class,不如把目光转向目标元素周围稳定的父元素、兄弟元素或者文本内容:
举个例子,假设目标按钮在一个固定的<div class="static-form-container">容器里,而且按钮上的文字“提交”是不变的,那可以这么写:

# 先找稳定的父容器,再定位子元素
element = driver.find_element(By.XPATH, '//div[@class="static-form-container"]//button[text()="提交"]')

用元素的固定文本定位,比依赖动态生成的属性靠谱太多!

3. CSS选择器的部分匹配

CSS选择器也支持类似的模糊匹配,对应不同场景:

  • 前缀匹配(^=):匹配ID以element_开头的元素
    element = driver.find_element(By.CSS_SELECTOR, '[id^="element_"]')
    
  • 包含匹配(*=):匹配ID包含element的元素
    element = driver.find_element(By.CSS_SELECTOR, '[id*="element"]')
    
  • 后缀匹配($=):匹配ID以_item结尾的元素
    element = driver.find_element(By.CSS_SELECTOR, '[id$="_item"]')
    

4. 精准筛选动态数字(如果需要定位特定元素)

如果页面上有多个同类型的动态元素,你需要定位到某个特定数字的元素,可以先批量获取匹配元素,再提取数字筛选:

elements = driver.find_elements(By.XPATH, '//*[starts-with(@id, "element_")]')
target_element = None

for elem in elements:
    elem_id = elem.get_attribute('id')
    # 拆分ID提取数字部分(比如从element_789里拿789)
    dynamic_num = elem_id.split("_")[1]
    if dynamic_num == "789":  # 替换成你需要的目标数字
        target_element = elem
        break

额外小贴士:避开自动生成的选择器坑

Chrome开发者工具自动生成的XPath/CSS往往依赖动态属性,下次定位元素时,优先找这些稳定标识:

  • 元素的固定文本内容
  • 元素的role属性(比如role="button")
  • 页面结构里长期不变的父容器Class/ID
  • 输入框的placeholder属性

这样你的自动化代码就不会因为页面小更新就失效,对付1000次重复操作完全不在话下!

内容的提问来源于stack exchange,提问作者ARn Lamourette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:04:41