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

Python Selenium如何定位文本匹配元素及其对应的可点击赔率元素

Python+Selenium定位随机位置文本及对应赔率元素方案

核心逻辑:因为目标文本位置不固定,不要按固定索引定位,直接通过文本匹配定位目标元素,再关联查找同层级/父层级下的赔率元素即可,全程不要缓存元素对象,每次操作前重新查询避免倒计时刷新后元素失效。

  • 第一步:切换进入iframe
    目标比赛列表在页面iframe内,直接在外层DOM查找会找不到元素,需要先切换到对应iframe:
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 初始化10秒显式等待,避免硬等待导致的不稳定
    wait = WebDriverWait(driver, 10)
    # 等待iframe加载完成后切换
    iframe = wait.until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
    driver.switch_to.frame(iframe)
    
  • 第二步:限定范围查找目标文本元素
    只在你指定的比赛列表节点下查找,避免匹配到页面其他位置的相同文本:
    target_text = "CHE"
    # 限定在指定比赛列表节点下查找包含目标文本的元素,确认元素可见
    target_elem = wait.until(EC.visibility_of_element_located(
        (By.XPATH, f'//div[@class="gb-widget_match-list ext-widget_match-list"]//*[contains(text(), "{target_text}")]')
    ))
    
  • 第三步:关联查找对应赔率元素
    根据页面结构,找到目标文本所属的单个比赛项容器,再在容器内定位赔率按钮即可,可根据实际页面的类名调整xpath规则:
    # 向上查找最近的比赛项父容器,再查找容器内的赔率按钮
    odds_btn = target_elem.find_element(By.XPATH, './ancestor::div[contains(@class, "match-event")]//button[contains(@class, "odds-value")]')
    # 等待赔率按钮可点击后触发点击
    wait.until(EC.element_to_be_clickable(odds_btn)).click()
    
  • 补充注意事项
    • 每次倒计时刷新页面后,不要复用之前找到的元素对象,重新执行上述查找逻辑即可,避免出现元素失效报错
    • 如果目标文本是完全匹配的,把contains(text()换成text()=可以提升匹配精度,避免匹配到包含相同字符的其他文本
    • 如果页面类名有动态后缀,把类名精确匹配改成contains(@class, "类名关键词")的形式兼容性更好
    • 操作完成后如果要回到外层DOM,执行driver.switch_to.default_content()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:36:03