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

如何用Python的Selenium循环遍历带有序号的元素并执行验证与通知操作?

如何用Python的Selenium循环遍历带有序号的元素并执行验证与通知操作?

嘿,这个需求太适合用嵌套循环来解决了!不用手动写49遍重复代码,咱们通过两层循环就能轻松遍历所有天和场次的元素,下面给你梳理具体的实现思路和代码:

核心思路

因为你的元素ID是按day和seans的序号规律生成的(格式是pageContent_rptList_ChildRepeater_{day}_dvSeans_{seans}),所以我们可以:

  • 外层循环遍历天的序号(0到6)
  • 内层循环遍历场次的序号(0到6)
  • 每次循环动态拼接对应的元素ID,然后执行你原本的检查逻辑

优化后的完整代码

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import requests

# 假设你已经定义了TOKEN和CHAT_ID
TOKEN = "你的机器人TOKEN"
CHAT_ID = "你的聊天ID"

def send_telegram_message(day_num, seans_num):
    """封装发送Telegram消息的函数,让代码更整洁"""
    message = f"注意!第{day_num+1}天的第{seans_num+1}场次已满足条件(可见且边框为绿色)"
    url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={CHAT_ID}&text={message}"
    response = requests.get(url)
    print(response.json())

# 嵌套循环遍历所有天和场次
for day in range(7):
    for seans in range(7):
        try:
            # 动态生成元素ID
            element_id = f"pageContent_rptList_ChildRepeater_{day}_dvSeans_{seans}"
            target_element = driver.find_element(By.ID, element_id)
            
            # 检查元素可见性和边框颜色
            border_color = target_element.value_of_css_property('border-color')
            if target_element.is_displayed() and border_color == "rgb(8, 245, 26)":
                send_telegram_message(day, seans)
        except NoSuchElementException:
            # 如果元素不存在,直接跳过,继续检查下一个
            continue

代码说明

  1. 嵌套循环:外层for day in range(7)覆盖day0到day6,内层for seans in range(7)覆盖seans0到seans6,刚好遍历49个元素。
  2. 动态ID拼接:用f-string把当前循环的day和seans序号拼接到元素ID里,自动匹配对应的元素。
  3. 封装消息函数:把发送Telegram消息的逻辑单独抽成函数,不仅让主代码更简洁,还能方便修改消息内容(比如我在消息里加了具体的天和场次序号,方便你定位哪一个触发了通知)。
  4. 异常处理:每个元素的查找都单独捕获NoSuchElementException,确保某个元素不存在时,不会中断整个循环,继续检查剩下的元素。

这样一来,你就不用重复写49次相同的检查逻辑啦,代码维护起来也方便很多!

备注:内容来源于stack exchange,提问作者Murat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:03:06