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

Python Selenium双击TradingView图表元素无效问题排查

问题分析与解决方案

问题背景

爬取TradingView网站时,尝试双击图表中红圈标记的指标元素,但代码执行双击操作后无效果。相关代码及目标元素HTML结构如下:

尝试实现的代码

def change_indicator_settings(self, entry, tp, sl):
    # double click on the indicator
    indicator = self.driver.find_elements(By.CSS_SELECTOR, 'div[data-name="legend-source-item"]')
    print(indicator[0])
    print(indicator[0].get_attribute('class'))
    ActionChains(self.driver).double_click(indicator[0]).perform()

目标元素HTML结构

<div class="sources-131H9iuA"> 
  <div class="item-131H9iuA last-131H9iuA blockHidden-e6PF69Df"></div>
  <div class="item-131H9iuA study-131H9iuA has5Buttons-131H9iuA withTail-131H9iuA" data-name="legend-source-item"></div> 
  <div class="item-131H9iuA study-131H9iuA disabled-131H9iuA has5Buttons-131H9iuA" data-name="legend-source-item"></div>
</div>

问题点及对应解决方法

  • 元素索引选择错误:当前代码取indicator[0],但从HTML结构看,第一个匹配div[data-name="legend-source-item"]的是第二个子元素(索引为1),indicator[0]实际指向的是不带该属性的隐藏元素,双击自然无效。
    解决:调整索引为indicator[1],或使用更精准的CSS选择器直接定位目标元素:

    indicator = self.driver.find_element(By.CSS_SELECTOR, 'div.study-131H9iuA:not(.disabled-131H9iuA)[data-name="legend-source-item"]')
    
  • 元素未完成交互准备:执行双击时,元素可能还未完全渲染或处于不可交互状态。
    解决:添加显式等待,确保元素可交互后再操作:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    def change_indicator_settings(self, entry, tp, sl):
        indicator = WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.study-131H9iuA:not(.disabled-131H9iuA)[data-name="legend-source-item"]'))
        )
        ActionChains(self.driver).double_click(indicator).perform()
    
  • 前端事件监听逻辑特殊:TradingView可能未直接绑定原生双击事件,需要先hover元素再触发双击。
    解决:先移动到元素上再执行双击:

    ActionChains(self.driver).move_to_element(indicator).double_click().perform()
    
  • 元素被遮挡:页面遮罩层、弹窗等可能遮挡目标元素,导致双击无法触发。
    解决:通过indicator.is_displayed()验证元素可见性,若被遮挡则先关闭遮挡元素。

  • ActionChains兼容性问题:部分浏览器对ActionChains的双击支持存在差异,可尝试用JavaScript模拟双击事件:

    self.driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));", indicator)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:42