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

Python Selenium如何编写if语句判断元素class属性是否为指定值

解决方案

逻辑说明

你需要的核心判断规则是:检测页面中是否存在至少3个class为pointer gray gray的span元素,满足条件后再执行下注操作。你原有写法的错误点在于把下注逻辑放在了finally块中,不管元素是否匹配成功,finally块都会执行,完全不符合你的需求。

完整可运行代码

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time

# 提前定义你自己的业务变量
betAmount = "你的下注金额"
betMultiplier = "你的下注乘数"

while True:
    try:
        # 等待最多10秒,直到3个符合class要求的元素全部出现
        WebDriverWait(driver, 10).until(
            EC.all_of(
                EC.presence_of_element_located((By.XPATH, "(//span[@class='pointer gray gray'])[1]")),
                EC.presence_of_element_located((By.XPATH, "(//span[@class='pointer gray gray'])[2]")),
                EC.presence_of_element_located((By.XPATH, "(//span[@class='pointer gray gray'])[3]"))
            )
        )
        # 条件匹配成功后执行下注操作
        driver.find_element(By.XPATH, "//input[@type='text']").send_keys(betAmount)
        driver.find_element(By.XPATH, "//input[@type='number']").send_keys(betMultiplier)
        driver.find_element(By.XPATH, "//div[@class='bet-button']").click()
        # 下注后加等待避免重复提交,可按需调整时长
        time.sleep(2)
    except:
        # 超时未匹配到3个符合要求的元素,直接进入下一轮检测
        continue

可选简化写法

如果需要更灵活的匹配规则,也可以先批量获取元素再做判断:

while True:
    try:
        # 获取所有class符合要求的span元素
        gray_elements = driver.find_elements(By.XPATH, "//span[@class='pointer gray gray']")
        # if判断元素数量是否达标
        if len(gray_elements) >= 3:
            driver.find_element(By.XPATH, "//input[@type='text']").send_keys(betAmount)
            driver.find_element(By.XPATH, "//input[@type='number']").send_keys(betMultiplier)
            driver.find_element(By.XPATH, "//div[@class='bet-button']").click()
            time.sleep(2)
    except:
        continue

稳定性优化建议

如果页面中元素的class顺序可能发生变动,你可以把XPATH的匹配规则改成//span[contains(@class,'pointer') and contains(@class,'gray')],即使class顺序变化也能正常识别。另外高版本Selenium已经废弃了find_element_by_*系列写法,建议统一使用find_element(By.定位类型, 路径)的语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:04