You need to enable JavaScript to run this app. Selenium WebDriver无法定位TradingView Screener页面元素如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Selenium WebDriver无法定位TradingView Screener页面元素如何解决

问题根因

你遇到的定位失败是多个问题共同导致的:

  • 语法错误:第一个XPath表达式未闭合,缺少右侧方括号],本身属于无效表达式
  • 属性匹配错误:目标元素的属性是data-name而非name,使用@name检索自然匹配不到对应节点
  • 上下文错误:TradingView的筛选器内容默认嵌套在独立iframe节点中,Selenium默认只检索顶层DOM,无法直接找到iframe内部的元素
  • 反爬拦截:Selenium默认携带的自动化特征会被TradingView的反爬策略识别,返回的页面结构和普通用户访问的不一致

可行解决代码

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

# 配置WebDriver屏蔽自动化特征
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

driver = webdriver.Chrome(options=options)
# 覆盖navigator.webdriver检测标记
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
wait = WebDriverWait(driver, 15)

# 访问目标页面
driver.get('https://www.tradingview.com/screener/')

# 切换到screener对应的iframe上下文
screener_iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*='screener']")))
driver.switch_to.frame(screener_iframe)

# 定位并点击Filters按钮,两种写法二选一即可
# 写法1:基于data-name属性定位
filters_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@data-name='screener-filter']")))
# 写法2:基于文本定位,用normalize-space处理文本前后的空白字符
# filters_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[normalize-space(text())='Filters']")))
filters_btn.click()

# 后续操作完成后如果需要回到顶层DOM,执行以下代码
# driver.switch_to.default_content()

注意事项

  • 等待时长可根据自身网络情况适当调整,避免网络波动导致加载超时
  • 如果后续需要操作iframe外的元素,必须先切回顶层DOM再进行定位

内容的提问来源于stack exchange,提问作者Алексей Поздняков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:51:01