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

使用Selenium爬取EEX网站不同日期电力期货数据遇阻求助

解决EEX网站日期下拉组件的数据选择问题

你的核心问题是未处理左侧的日期筛选组件,这个组件是自定义下拉菜单而非原生<select>,需要用Selenium模拟点击展开+选择的操作,以下是修改后的完整代码:

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
import pandas as pd

driver = webdriver.Chrome()
driver.get(url='https://www.eex.com/en/market-data/power/futures')

# 处理Cookie弹窗
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[value='I accept all cookies.']"))).click()

# 选择产品:EEX German Power Futures
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.dropdown-toggle.form.input-select div.filter-option-inner"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='dropdown-menu show']//li/a[@class='dropdown-item']/span[contains(., 'EEX German Power Futures')]"))).click()

# -------------------------- 新增日期选择逻辑 --------------------------
# 点击左侧日期下拉按钮,展开日期列表
date_dropdown_btn = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "div#dateRangeDropdown button.dropdown-toggle"))
)
date_dropdown_btn.click()

# 选择目标日期(示例:选择"2024-05-20",可替换为你需要的日期文本)
target_date = "2024-05-20"
date_option = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, f"//div[@class='dropdown-menu show']//li/a[@class='dropdown-item']/span[text()='{target_date}']"))
)
date_option.click()

# 等待表格数据刷新(关键:日期切换后数据会重新加载,必须等加载完成)
WebDriverWait(driver, 20).until(
    EC.staleness_of(driver.find_element(By.CSS_SELECTOR, "div#baseloadwidget_pfpde > table.mv-quote"))
)
# 重新获取刷新后的表格
table_data = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div#baseloadwidget_pfpde > table.mv-quote"))).get_attribute("outerHTML")
# ----------------------------------------------------------------------

df_list = pd.read_html(table_data)
if len(df_list) > 0:
    df = df_list[0] 
    print(df)
else:
    print("No data found on the table.")

driver.quit()

关键说明:

  • 日期下拉按钮用div#dateRangeDropdown button.dropdown-toggle定位,对应页面左侧的日期筛选触发按钮
  • 选择日期时使用精确匹配文本的XPATH,只需将target_date变量替换为下拉菜单中存在的日期格式(如"2024-05-20")
  • 通过staleness_of等待旧表格失效,确保新数据加载完成后再抓取,避免获取旧数据

若需批量获取多个日期数据,可将目标日期存入列表,循环执行日期选择+数据抓取逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:19