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

Selenium点击div折叠WSJ财报表格并转Pandas DataFrame问题咨询

问题解答

问题1:如何实现点击div元素折叠目标表格后转换为Pandas DataFrame

你原有代码存在3个核心问题导致点击失败:

  1. 未处理WSJ页面默认弹出的cookie同意弹窗,弹窗会在页面最上层遮挡所有可点击元素,导致定位到的元素无法触发点击动作
  2. 定位元素的XPATH错误:你使用的cr_cashflow是现金流量表模块的类名,当前访问的资产负债表页面对应模块类名为cr_balance-sheet,类名不匹配自然定位不到目标元素
  3. 语法错误:print(driver.page_source[0][-1])中page_source是字符串类型,两层索引会直接抛出异常,中断后续代码执行

以下是修正后可正常运行的代码:

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import pandas as pd

# Selenium 4.6+ 无需手动指定chromedriver路径,会自动匹配安装
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
url = 'https://www.wsj.com/market-data/quotes/TSLA/financials/annual/balance-sheet'
driver.get(url)

# 第一步:先处理cookie同意弹窗
try:
    accept_cookie = wait.until(EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler")))
    accept_cookie.click()
    time.sleep(2)
except:
    # 没有弹窗就跳过
    pass

# 第二步:定位负债及权益表格的折叠按钮,用属性匹配保证定位准确性
target_element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(),'Liabilities & Shareholders Equity')]/ancestor::div[@class='cr_dataTable module']/div[1]")))
# 用JS点击,规避元素遮挡导致的点击失效问题
driver.execute_script("arguments[0].click();", target_element)
time.sleep(3)

# 读取所有表格,索引0为资产表,索引1为负债及权益表
tables = pd.read_html(driver.page_source)
# 按需取对应索引的表格即可,无需额外折叠/展开也能正常读取
df = tables[1]
df.to_excel('./tesla_balancesheet_3.xlsx', sheet_name='balance_sheet', index=True)
print(df.tail())

driver.quit()

补充说明:实际上不需要折叠表格也可以读取到所有内容,pd.read_html会读取页面DOM中所有的<table>标签,不管标签是否设置了隐藏属性,只要DOM中存在就可以被识别,你直接取对应索引的表格即可,无需额外做折叠/展开操作。

问题2:为什么手动折叠表格后driver.page_source无法读取到对应内容

有两个常见原因:

  • 你手动操作的不是Selenium启动的Chrome实例:Selenium启动的是独立的干净浏览器进程,和你本地日常使用的Chrome窗口完全隔离,你在自己打开的Chrome里操作不会同步到Selenium控制的浏览器,自然page_source不会有变化
  • 折叠操作触发了DOM移除:WSJ前端基于React开发,部分折叠动作会直接把隐藏的表格元素从DOM树中移除,而不是仅设置display:none隐藏,这种情况下page_source里自然没有对应的表格标签,也就无法被pd.read_html识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:12:01