如何用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
代码说明
- 嵌套循环:外层
for day in range(7)覆盖day0到day6,内层for seans in range(7)覆盖seans0到seans6,刚好遍历49个元素。 - 动态ID拼接:用f-string把当前循环的day和seans序号拼接到元素ID里,自动匹配对应的元素。
- 封装消息函数:把发送Telegram消息的逻辑单独抽成函数,不仅让主代码更简洁,还能方便修改消息内容(比如我在消息里加了具体的天和场次序号,方便你定位哪一个触发了通知)。
- 异常处理:每个元素的查找都单独捕获
NoSuchElementException,确保某个元素不存在时,不会中断整个循环,继续检查剩下的元素。
这样一来,你就不用重复写49次相同的检查逻辑啦,代码维护起来也方便很多!
备注:内容来源于stack exchange,提问作者Murat
相关产品推荐
相关产品推荐

