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
相关产品推荐
相关产品推荐

