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
相关产品推荐
相关产品推荐

