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

Selenium Python如何点击无class、无ID属性的链接元素

Selenium 定位点击无ID/name属性Angular链接的方法

你之前的XPath定位失败核心原因有两个:

  1. 大小写匹配错误:目标元素内的实际文本是Hours By Activity,你写的匹配规则里用了小写b开头的by,无法匹配到对应节点
  2. 点击对象层级错误:就算修正大小写,直接匹配到的是内部的<span>标签,该标签没有绑定点击事件,点击后无法触发绑定在父级<div>上的ng-click逻辑

可直接使用以下几种方案实现点击:

  • 方案1:通过子标签文本定位父级可点击按钮
    优先用精准文本匹配,定位到span标签后向上查找绑定了点击事件的div节点,兼容性最好:
    # Selenium 4+ 版本请使用By类指定定位方式,旧的find_elements_by_xpath接口已被废弃
    from selenium.webdriver.common.by import By
    
    target = driver.find_element(By.XPATH, "//span[text()='Hours By Activity']/parent::div[@ng-click]")
    target.click()
    
    如果担心文本前后有不可见空白字符,可以用normalize-space()处理后做模糊匹配,同时加属性校验减少误匹配:
    target = driver.find_element(By.XPATH, "//span[contains(normalize-space(), 'Hours By Activity')]/ancestor::div[contains(@class, 'btn-primary')]")
    target.click()
    
  • 方案2:通过元素专属属性组合定位
    目标div有固定的ng-repeat属性和class特征,可以组合属性直接定位,不用依赖文本层级:
    target = driver.find_element(By.XPATH, "//div[contains(@class,'btn-primary') and @ng-repeat='dashboard in $ctrl.dashboards track by $index' and contains(.,'Hours By Activity')]")
    target.click()
    

如果定位时偶尔出现元素不存在/不可点击的报错,是因为AngularJS动态渲染内容还没加载完成,加显式等待即可解决:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最多等待10秒,直到元素可点击
wait = WebDriverWait(driver, 10)
target = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Hours By Activity']/parent::div[@ng-click]")))
target.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:33:39