求助:使用Python Selenium爬取TradingView的Ehlers MAMA值返回空数组
解决Selenium爬取TradingView Ehlers MAMA指标返回空数组的问题
嘿,我来帮你搞定这个问题!你现在用Selenium爬TradingView的MAMA指标时返回空数组,核心问题出在元素定位太脆弱,还有页面等待逻辑不够精准,咱们一步步来调整:
问题分析
你之前用的是绝对XPATH(/html/body/div[1]/.../span[3]/span),这种定位方式完全依赖页面的层级结构,TradingView的页面加载动态性很强,稍微一点结构变化就会找不到元素;另外你只等待页面最外层的div加载完成,这时候指标元素可能还没渲染出来。
优化后的代码
我给你调整了定位方式和等待逻辑,更稳定可靠:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException # 配置Chrome选项 option = webdriver.ChromeOptions() option.add_argument("--incognito") # 初始化浏览器(注意:chrome_options已废弃,改用options参数) browser = webdriver.Chrome(options=option) browser.get("https://www.tradingview.com/chart/vKzVQllW/#") # 延长超时时间,TradingView加载K线和指标需要更多时间 timeout = 15 try: # 先等待所有指标图例项加载完成 legend_items = WebDriverWait(browser, timeout).until( EC.visibility_of_all_elements_located((By.CLASS_NAME, "pane-legend-item")) ) # 遍历图例项,找到包含"MAMA"的那一项 for item in legend_items: # 获取指标名称标签 label_element = item.find_element(By.CLASS_NAME, "pane-legend-item-title") if "MAMA" in label_element.text: # 获取对应的指标数值 mama_value_element = item.find_element(By.CSS_SELECTOR, "span.pane-legend-item-value.pane-legend-line") print(f"成功获取MAMA指标数值: {mama_value_element.text}") break else: print("未找到MAMA指标的图例项") except TimeoutException: print("页面加载超时,未能找到目标元素") finally: # 确保浏览器最终关闭,避免资源占用 browser.quit()
关键修改点
- 替换废弃参数:把
chrome_options改成options,避免版本兼容警告 - 更精准的等待:等待指标图例项加载完成,而不是宽泛的页面元素
- 鲁棒的定位逻辑:通过指标名称("MAMA")匹配对应的数值,即使指标在图例中的位置变化,也能准确找到
- CSS选择器替代绝对XPATH:用类名组合定位元素,比层级XPATH稳定得多
额外注意事项
- 如果还是找不到元素,可以检查页面是否有iframe,若有需要先通过
browser.switch_to.frame()切换到对应iframe - TradingView有反爬机制,如果频繁请求被限制,可以添加随机等待时间、模拟滚动等人类操作行为
内容的提问来源于stack exchange,提问作者Logan Thompson
相关产品推荐
相关产品推荐

