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

如何用Selenium实现Telegram群组最新消息自动选择与跳转?

解决方案

问题分析

你之前用By.CLASS_NAME定位失败,核心原因是"text-content with-meta"是两个类名,By.CLASS_NAME仅支持传入单个类名,多类名场景需要用CSS选择器(.text-content.with-meta)或XPATH定位。

关于通过递增message ID定位最新消息的方法,完全可行,但要注意Telegram消息ID可能存在不连续情况(比如删除消息后),因此更稳妥的思路是结合两种方案:要么基于当前最大ID递增查找,要么直接定位消息列表的最后一个元素(最新消息)。


方法一:通过递增message ID定位最新消息

实现步骤

  1. 首次运行时,提取当前所有消息的ID数字,取最大值作为初始ID。
  2. 每次循环递增ID,尝试定位新消息,捕获NoSuchElementException避免因ID不连续报错。
  3. 找到新消息后,跳转目标页面再返回Telegram群组继续检测。

代码示例

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

driver = webdriver.Chrome()
driver.get("你的Telegram群组页面URL")
time.sleep(5)  # 等待页面加载完成

# 获取当前最大消息ID
def get_last_message_id():
    message_elements = driver.find_elements(By.XPATH, '//*[starts-with(@id, "message")]')
    if not message_elements:
        return 0
    ids = [int(el.get_attribute("id").replace("message", "")) for el in message_elements]
    return max(ids)

last_id = get_last_message_id()

while True:
    current_id = last_id + 1
    try:
        # 构造新消息的XPATH
        message_xpath = f'//*[@id="message{current_id}"]/div[3]/div/div[1]/div'
        message = driver.find_element(By.XPATH, message_xpath)
        message_text = message.text.strip()
        
        # 跳转目标页面
        driver.get(f"https://key-drop.com/en/?code={message_text}")
        time.sleep(5)
        
        # 返回Telegram群组页面
        driver.back()
        time.sleep(3)
        
        # 更新最新消息ID
        last_id = current_id
    except NoSuchElementException:
        # 未找到新消息,等待后重试
        time.sleep(2)
        continue

方法二:直接定位最新消息(更可靠)

不依赖消息ID,直接通过消息列表顺序定位最后一个元素(最新消息),这种方法不受ID不连续影响,稳定性更高。

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("你的Telegram群组页面URL")
time.sleep(5)

# 记录上一次处理的消息内容,避免重复跳转
last_processed_text = ""

while True:
    # 获取所有消息文本元素(根据你的HTML结构调整选择器)
    message_elements = driver.find_elements(By.CSS_SELECTOR, '.text-content.with-meta')
    if not message_elements:
        time.sleep(2)
        continue
    
    # 取最后一个元素即为最新消息
    latest_message = message_elements[-1]
    current_text = latest_message.text.strip()
    
    # 仅处理未见过的非空消息
    if current_text != last_processed_text and current_text:
        last_processed_text = current_text
        driver.get(f"https://key-drop.com/en/?code={current_text}")
        time.sleep(5)
        driver.back()
        time.sleep(3)
    else:
        time.sleep(2)

注意事项

  • 确保Telegram页面处于登录状态,且群组消息已完全加载。
  • Telegram页面元素结构可能随版本更新变化,需定期验证选择器有效性。
  • 频繁操作可能触发反机器人机制,建议适当延长等待时间,避免账号受限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:31:47