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

Selenium无法定位需点击的Collapse All按钮问题排查

排查Selenium定位Yahoo财经“Collapse All”按钮失败的问题

核心问题分析

  • CLASS_NAME定位规则错误:By.CLASS_NAME仅支持单个类名,不能用空格分隔多个类名。你尝试的多类名写法(比如expandPf Fz(s)...)完全不符合该定位方式的要求,哪怕只写两个类名也无法生效。
  • CSS_SELECTOR写法错误:直接堆叠类名的写法不合法,正确的多类名CSS选择器需要用.连接每个类;另外类名中的C($linkColor)、C($linkActiveColor):h是动态样式变量(渲染后会被替换为具体值),这类动态类名不能用于定位,必须剔除。
  • 显式等待的定位逻辑错误:你在显式等待中仍使用了错误的CLASS_NAME多类名写法,自然无法找到元素。

修正后的代码

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

url = 'https://finance.yahoo.com/quote/AAPL/balance-sheet?p=AAPL'
driver = webdriver.Chrome()
driver.get(url)

# 先处理Cookie弹窗(若页面出现)
try:
    cookie_accept_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-test="accept-all"]'))
    )
    cookie_accept_btn.click()
except:
    pass  # 无弹窗则跳过

# 定位并点击Collapse All按钮
try:
    collapse_btn = WebDriverWait(driver, 20).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.expandPf.Fz(s).Bd(0).Fw(500).Fl(end)'))
    )
    # 滚动到元素可视区域(避免元素在视口外无法点击)
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", collapse_btn)
    collapse_btn.click()
except Exception as e:
    print(f"操作失败: {str(e)}")
finally:
    driver.quit()

额外注意事项

  • 若仍无法定位,可确认页面是否存在iframe(Yahoo财经该页面无iframe,但需自行验证);
  • 部分情况下页面渲染延迟,可适当延长显式等待时间,或添加页面加载完成的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:01:05