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

Python Selenium点击Zerodha Table View切换按钮失败求修复

问题修复方案

核心错误分析

你代码里的关键问题是错误使用了By.TAG_NAME定位方式:browser.find_element(By.TAG_NAME,value='ciq-DT tableview-ui')。TAG_NAME仅能匹配单个HTML标签名(这里目标元素的标签是cq-toggle),而你传入的是两个类名,这直接导致元素定位失败。


具体修复步骤

1. 替换为正确的元素定位方式

针对目标元素的HTML结构:

<cq-toggle class="ciq-DT tableview-ui" cq-member="tableView">
<span></span>
<cq-tooltip>Table View</cq-tooltip>
</cq-toggle>

推荐以下几种稳定的定位方式:

方式一:CSS选择器(优先使用)

通过多个class组合定位,用.连接不同class:

browser.find_element(By.CSS_SELECTOR, "cq-toggle.ciq-DT.tableview-ui").click()
方式二:XPath定位

可以通过class组合或内部tooltip文本定位(后者更稳定):

# 通过class组合定位
browser.find_element(By.XPATH, "//cq-toggle[@class='ciq-DT tableview-ui']").click()

# 通过内部tooltip文本定位
browser.find_element(By.XPATH, "//cq-toggle[cq-tooltip/text()='Table View']").click()

2. 用显式等待替代硬编码sleep

你当前用time.sleep(10)等待页面加载,这种方式既不稳定又低效。建议用Selenium的显式等待,确保元素完全可点击后再操作:

首先导入所需模块:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

然后替换原有的等待和点击代码:

browser.get('https://kite.zerodha.com/chart/ext/ciq/BSE/SBIN/128028676')

# 最长等待15秒,直到按钮可点击
table_view_btn = WebDriverWait(browser, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "cq-toggle.ciq-DT.tableview-ui"))
)
table_view_btn.click()

3. 检查iframe嵌套情况

如果上述方法仍无法定位元素,需确认目标元素是否在<iframe>内部:

  • 打开浏览器开发者工具(F12),查看目标元素是否被包含在<iframe>标签中。
  • 若存在iframe,需先切换到iframe再定位:
# 示例:通过tag name定位iframe,实际需根据页面结构调整
iframe = browser.find_element(By.TAG_NAME, "iframe")
browser.switch_to.frame(iframe)

# 执行元素定位和点击
table_view_btn = WebDriverWait(browser, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "cq-toggle.ciq-DT.tableview-ui"))
)
table_view_btn.click()

# 操作完成后回到主文档(如需)
browser.switch_to.default_content()

完整修复后的代码片段

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

opts = Options()
# opts.set_headless()
# assert opts.headless  # Operating in headless mode
browser = Firefox(options=opts)
browser.implicitly_wait(3)

browser.get('https://kite.zerodha.com')
# 登录操作
browser.find_element(By.ID, 'userid').send_keys('XXXXXX')
browser.find_element(By.ID, 'password').send_keys('XXXXX')
browser.find_element(By.ID, 'password').submit()

# 显式等待登录跳转完成
WebDriverWait(browser, 15).until(
    EC.url_contains('dashboard')
)

browser.get('https://kite.zerodha.com/chart/ext/ciq/BSE/SBIN/128028676')

# 等待Table View按钮并点击
table_view_btn = WebDriverWait(browser, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "cq-toggle.ciq-DT.tableview-ui"))
)
table_view_btn.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:40