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

如何用Python Selenium从表格中获取最新变动的币种名称

解决方案:基于「实时对比上一轮状态」的监控逻辑

核心问题出在你之前的代码可能依赖了一个持久化的「已通知币种列表」,导致重复出现的币种无法触发通知。正确的思路应该是跟踪每一轮刷新后的前两位币种状态,和上一轮做对比,只要位置或内容有变化,就针对变动的部分触发通知,而非判断币种是否被通知过。

具体实现步骤

  1. 初始化上一轮状态
    启动脚本后先获取页面前两位币种,将其作为初始参考状态,比如用列表previous_top2 = []存储。

  2. 每次刷新后的对比逻辑
    刷新页面后获取当前前两位币种存入current_top2:

    • 如果current_top2和previous_top2完全一致:不执行任何操作
    • 如果不一致:逐位置对比两个列表,找出变动的币种,触发Discord通知,随后更新previous_top2为当前状态
  3. 核心代码示例
    以下是调整后的关键逻辑片段:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    import discord_webhook
    
    # 初始化WebDriver(根据你的浏览器类型调整)
    driver = webdriver.Chrome()
    driver.get("https://www.binance.com/en/futures/funding-rate")
    
    # 初始化上一轮的前两位币种状态
    previous_top2 = []
    
    # 循环监控
    while True:
        # 获取当前前两位币种(需根据页面实际元素定位调整)
        current_top2 = []
        for i in range(1, 3):
            try:
                coin_elem = driver.find_element(By.XPATH, f"//tbody/tr[{i}]/td[1]/div/a")
                current_top2.append(coin_elem.text.strip())
            except:
                # 定位失败时跳过,避免脚本崩溃
                continue
        
        # 对比当前与上一轮状态
        if current_top2 != previous_top2 and len(current_top2) == 2:
            # 遍历位置,找出变动项
            for idx, coin in enumerate(current_top2):
                if idx >= len(previous_top2) or coin != previous_top2[idx]:
                    # 触发Discord通知(替换为你的机器人逻辑)
                    webhook = discord_webhook.DiscordWebhook(
                        url="你的Discord Webhook地址",
                        content=f"第{idx+1}位币种更新:{coin}"
                    )
                    webhook.execute()
            # 更新上一轮状态
            previous_top2 = current_top2.copy()
        
        # 刷新页面并等待(可调整间隔时长)
        driver.refresh()
        time.sleep(60)
    

关键细节说明

  • 抛弃持久化通知列表:不再记录所有已通知过的币种,只关注相邻两轮的状态差异,确保即使旧币种重新回到前两位也能触发通知。
  • 位置级精准对比:逐位置检查前两位,能明确是第一位还是第二位发生变动,通知内容更精准。
  • 状态更新时机:仅在确认状态变动后才更新上一轮参考值,避免页面未加载完全时的错误状态覆盖。

额外优化建议

  • 页面加载等待:刷新后加入显式等待,确保表格元素加载完成再获取数据,避免定位失败:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver.refresh()
    # 等待第一位币种元素加载完成,超时10秒
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//tbody/tr[1]/td[1]/div/a"))
    )
    
  • 异常捕获:给元素定位、通知发送等步骤加上try-except块,避免脚本因单次异常直接终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:16