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

如何修改Selenium代码切换表格季度视图至Q4 2021 13F Filings

解决方案

要实现将“Quarter View”切换为“Q4 2021 13F Filings”并抓取对应表格,你需要在页面加载后添加季度选择的操作步骤,同时优化原代码的浏览器实例创建逻辑(避免重复打开浏览器)。以下是修改后的完整代码及说明:

修改后的代码

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

test = {}
dict_scr = {}

# 初始化浏览器实例(仅创建一次,提升效率)
options = webdriver.FirefoxOptions()
options.binary_location = r'C://Local/Mozilla Firefox/firefox.exe'
driver = webdriver.Firefox(executable_path='C:/geckodriver.exe', options=options)

try:
    for ii in range(0, 12):
        url = link_scr['Links'][ii]
        driver.get(url)
        
        # 等待季度选择下拉框加载完成
        quarter_select = WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.ID, "quarter_select"))
        )
        
        # 选择目标季度:Q4 2021 13F Filings
        select = Select(quarter_select)
        # 方式1:通过可见文本选择(直观易读)
        select.select_by_visible_text("Q4 2021 13F Filings")
        # 方式2:通过选项value选择(更稳定,示例网站中该选项value为"1640995200")
        # select.select_by_value("1640995200")
        
        # 等待表格更新(切换季度后表格会重新加载,必须等待新数据渲染完成)
        target_table = WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "table#current_holdings_table"))
        )
        
        # 抓取表格HTML并解析为DataFrame
        test[link_scr.index[ii]] = target_table.get_attribute("outerHTML")
        dict_scr[link_scr.index[ii]] = pd.read_html(test[link_scr.index[ii]])
        print(test[link_scr.index[ii]])
finally:
    # 循环结束后关闭浏览器,释放资源
    driver.quit()

关键修改点说明

  1. 复用浏览器实例:将浏览器初始化代码移到循环外,避免每次循环打开新窗口,大幅提升运行效率。
  2. 季度选择逻辑:
    • 目标网站的季度选择控件是原生<select>元素(ID为quarter_select),因此可以直接使用Selenium的Select类进行操作。
    • 提供两种选择方式:通过可见文本或选项value,可根据稳定性需求选择。
  3. 等待表格更新:切换季度后页面会异步加载新表格数据,必须重新等待表格元素加载完成,确保抓取的是目标季度的数据。
  4. 路径修正:修正了geckodriver.exe路径的转义问题,避免运行报错。

备用方案(若原生select不可用)

如果网站后续修改了控件结构(改用自定义下拉而非原生select),可替换季度选择部分的代码为:

# 点击下拉按钮触发选项列表
dropdown_btn = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "div.selectize-input"))
)
dropdown_btn.click()

# 点击目标季度选项
target_option = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'selectize-dropdown')]//div[text()='Q4 2021 13F Filings']"))
)
target_option.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:45:25