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

如何点击Yahoo财经季度按钮获取季度财务数据而非年度数据?

解决Yahoo Finance季度数据按钮点击无效问题

问题根源

  • 你使用的绝对XPATH(//*[@id="Col1-1-Financials-Proxy"]/section/div[1]/div[2]/button)稳定性极差,页面结构稍有变动就会定位错误,导致误点到Markets标签这类无关元素。
  • 季度按钮可能处于浏览器视口外,直接调用click()会失效——Chrome无法点击不在可见区域内的元素。

修复方案

1. 改用精准且稳定的元素定位

通过按钮的文本和属性组合定位,比如季度按钮的文本是Quarterly,用相对XPATH匹配:

//button[text()='Quarterly']

这种定位方式不受页面层级变动影响,精准指向目标按钮。

2. 先滚动到按钮位置再点击

在点击前将元素滚动到视口内,确保点击操作有效。

3. 强化等待逻辑

等待元素可见(而非仅可点击),确保页面完全加载后再执行操作;点击后额外等待页面切换完成,确认季度数据已加载。

修改后的代码

def clickQuarterlyButton(url):
    try:
        options = Options()
        # 无头模式下需添加窗口大小参数,避免元素不可见
        # options.add_argument('--headless')
        # options.add_argument('--window-size=1920,1080')
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
        driver.get(url)
        
        # 关闭弹窗(无弹窗则跳过)
        try:
            close_btn = WebDriverWait(driver, constants.SLEEP_TIME).until(
                EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Close']"))
            )
            close_btn.click()
        except:
            pass
        
        # 等待季度按钮可见并滚动到视口
        quarterly_btn = WebDriverWait(driver, constants.SLEEP_TIME).until(
            EC.visibility_of_element_located((By.XPATH, "//button[text()='Quarterly']"))
        )
        driver.execute_script("arguments[0].scrollIntoView(true);", quarterly_btn)
        
        # 点击季度按钮
        quarterly_btn.click()
        
        # 等待页面切换为季度数据(验证按钮处于激活状态)
        WebDriverWait(driver, constants.SLEEP_TIME).until(
            EC.presence_of_element_located((By.XPATH, "//button[text()='Quarterly' and contains(@class, 'is-active')]"))
        )
        
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        driver.quit()  # 操作完成后关闭浏览器
        return soup 
    except Exception as e:
        print('-------------------------------------------------')
        print('EXCEPTION OCCURED IN CLICK QUARTERLY BUTTON !!!!')
        print(e)
        print('-------------------------------------------------')
        return None

额外注意事项

  • 若启用无头模式,必须添加--window-size参数,模拟正常窗口尺寸,避免元素因视口过小无法加载。
  • 尽量避免使用绝对XPATH,优先用文本、class属性等组合的相对定位,提升代码适配性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:35:36