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

Python爬取多日期MCX bhavcopy无输出无报错问题求助

问题排查及修复方案

核心问题点

  • 日期输入逻辑错误:你代码中k.send_keys("d")是输入字符"d"而非循环生成的日期值,同时没有将日期转为网站要求的DD/MM/YYYY格式字符串
  • XPATH语法错误:下载按钮的XPATH中*和[之间多了多余空格,导致无法定位到下载元素
  • Chrome下载配置缺失:你定义了download_dir但没有配置到Chrome启动参数中,没有设置自动下载不弹窗的规则
  • 元素定位方法弃用:新版Selenium已经废弃find_element_by_xpath/find_element_by_id这类写法,未做兼容的情况下会触发隐性报错
  • 缺少页面加载等待:刚打开网站就直接查找元素,大概率会因为元素未渲染完成导致定位失败

修复后的可运行代码

import os
import time
import pandas as pd
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
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.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# 配置Chrome下载参数
download_dir = "F:\\commodity research"
chrome_options = Options()
prefs = {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
chrome_options.add_experimental_option("prefs", prefs)

# 启动驱动
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get("https://www.mcxindia.com/market-data/bhavcopy")
print("good going!!")

# 等待日期输入框加载完成
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "txtDate")))

# 日期范围可自行调整,这里示例取3天的数据
for d in pd.date_range(start='2021-08-11', end='2021-08-13'):
    # 转成网站要求的DD/MM/YYYY格式
    date_str = d.strftime("%d/%m/%Y")
    # 处理日期输入框
    date_input = driver.find_element(By.ID, "txtDate")
    driver.execute_script("arguments[0].removeAttribute('readonly')", date_input)
    date_input.clear()
    date_input.send_keys(date_str)
    # 点击查询
    driver.find_element(By.ID, "btnShowDatewise").click()
    # 等待下载按钮可点击
    csv_download_btn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='lnkExpToCSV']")))
    csv_download_btn.click()
    # 等待下载完成
    time.sleep(3)

driver.quit()

额外注意事项

  • 如果运行还是没有下载,可以先手动打开网站确认你要查询的日期是否有对应的bhavcopy数据,非交易日是没有数据的
  • 路径如果包含中文或者空格,要确保路径权限正常,不会被系统拦截写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:06:04