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

如何用Python Selenium自动获取TradingView新K线的MAMA/FAMA指标值

解决TradingView MAMA/FAMA指标自动抓取新K线数据的问题

我之前也碰到过一模一样的情况——TradingView的指标 tooltip 只有在鼠标 hover 到对应K线上时才会渲染出数值,所以核心思路就是自动模拟鼠标hover到最新生成的K线,然后抓取数据,同时定期检查新K线的出现。下面是具体的实现步骤和代码示例:

步骤1:定位最新K线元素

TradingView的K线元素通常带有tv-bar类名,最新的K线一般会有额外的标识(比如tv-bar-last),或者你可以直接获取所有K线元素的最后一个。示例代码如下:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化显式等待,最长等待10秒
wait = WebDriverWait(driver, 10)
# 等待所有K线元素加载完成
bars = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.tv-bar")))
# 获取最后一个(最新的)K线元素
latest_bar = bars[-1]

步骤2:模拟鼠标hover到最新K线

用Selenium的ActionChains工具模拟鼠标移动操作,触发指标tooltip的渲染:

from selenium.webdriver.common.action_chains import ActionChains

# 初始化动作链
actions = ActionChains(driver)
# 移动鼠标到最新K线位置
actions.move_to_element(latest_bar).perform()

步骤3:抓取MAMA/FAMA指标数值

hover之后,指标数值会出页面的tooltip元素里,你需要根据实际页面结构定位数值所在的位置。示例代码:

# 等待tooltip元素可见
tooltip = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.tv-tooltip")))
# 根据指标名称定位数值(请根据实际页面结构调整XPath)
mama_value = tooltip.find_element(By.XPATH, ".//span[contains(text(), 'MAMA')]/following-sibling::span").text
fama_value = tooltip.find_element(By.XPATH, ".//span[contains(text(), 'FAMA')]/following-sibling::span").text
print(f"最新K线MAMA值: {mama_value}, FAMA值: {fama_value}")

步骤4:自动检测新K线并循环抓取

为了自动获取新生成的K线数据,你可以设置一个循环,定期检查K线数量的变化,当发现新K线时重复上述操作:

import time

# 记录初始K线数量
previous_bar_count = len(bars)

while True:
    # 根据K线周期设置等待时间(比如1分钟K线可以设60秒左右)
    time.sleep(5)
    # 重新获取当前所有K线元素
    current_bars = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.tv-bar")))
    current_bar_count = len(current_bars)
    
    # 如果K线数量增加,说明有新K线生成
    if current_bar_count > previous_bar_count:
        latest_bar = current_bars[-1]
        # 模拟hover触发tooltip
        actions.move_to_element(latest_bar).perform()
        # 抓取最新指标值
        tooltip = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.tv-tooltip")))
        mama_value = tooltip.find_element(By.XPATH, ".//span[contains(text(), 'MAMA')]/following-sibling::span").text
        fama_value = tooltip.find_element(By.XPATH, ".//span[contains(text(), 'FAMA')]/following-sibling::span").text
        print(f"新K线MAMA值: {mama_value}, FAMA值: {fama_value}")
        # 更新K线数量记录
        previous_bar_count = current_bar_count

额外注意事项

  • 元素定位调整:TradingView的页面结构可能会更新,建议用浏览器开发者工具(F12)实际查看K线和tooltip的具体class或XPath,随时调整定位表达式。
  • 反爬规避:频繁的自动化操作可能触发TradingView的反爬机制,建议在循环中加入合理的等待时间,或者偶尔模拟鼠标移动到其他位置,让行为更贴近真实用户。
  • 优先用显式等待:尽量用WebDriverWait替代time.sleep,这样可以提高代码稳定性,避免不必要的等待。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:05:34