Selenium操作TradingView打开BTC并添加指标时出现NoSuchElementException
解决Selenium切换新标签页后找不到元素的问题
你遇到的NoSuchElementException核心原因是:点击按钮打开新标签页后,WebDriver还停留在原来的标签页上,自然找不到新标签页里的元素。另外你的代码里还有个小拼写错误——execute_script里写的是argument[0],正确应该是arguments[0]。
下面是修正后的代码,同时把不可靠的time.sleep换成Selenium的显式等待,让代码更稳定:
from selenium import webdriver from selenium.webdriver import ChromeOptions from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器 options = ChromeOptions() driver = webdriver.Chrome("E:\\Chrome driver\\chromedriver.exe", options=options) driver.get("https://www.tradingview.com/symbols/BTCUSDTPERP/ideas/?exchange=BINANCE") # 点击按钮打开新标签页 advanced_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#anchor-page-1 > div > div.tv-category-header__buttons.tv-category-header__buttons--adaptive.tv-category-header__buttons--hide-if_bigger-than_phone > div > a.btn-Phr0VjiT.btnDesktop-Phr0VjiT.button-OvB35Th_.size-large-OvB35Th_.color-brand-OvB35Th_.variant-secondary-OvB35Th_.with-start-icon-OvB35Th_.with-end-icon-OvB35Th_")) ) driver.execute_script("arguments[0].click()", advanced_btn) # 切换到新打开的标签页 # 获取所有窗口句柄,切换到最后一个(新打开的标签页) all_windows = driver.window_handles driver.switch_to.window(all_windows[-1]) # 等待新标签页的目标按钮加载完成并点击 chart_btn = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#header-toolbar-chart-styles > div")) ) driver.execute_script("arguments[0].click()", chart_btn) # 后续操作完成后可以关闭浏览器 # driver.quit()
关键改动说明:
- 用
WebDriverWait显式等待元素可点击,替代固定时长的time.sleep,避免页面加载慢导致的元素找不到问题 - 添加了窗口句柄切换逻辑,让WebDriver聚焦到新打开的标签页
- 修正了
execute_script里的参数拼写错误(arguments而非argument)
内容的提问来源于stack exchange,提问作者Laugh TM
相关产品推荐
相关产品推荐

