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

如何用Python Selenium循环选择年月下拉框并下载海关数据

批量下载多米尼加海关数据解决方案

问题背景

已实现单次从多米尼加海关网站选择年份、月份、数据类型后下载数据,但手动逐个选择年月效率极低,尝试循环批量处理时触发object of type 'WebElement' has no len()错误。

错误原因

尝试的循环代码中,使用driver.find_element(By.XPATH, '//*[@id="year"]/option[2]')仅获取了单个下拉选项元素,而非所有年份选项的集合,因此调用len()时触发类型错误;同时代码未覆盖完整的「选择参数-查询数据-触发下载」流程。

可行解决方案

使用Selenium的Select类简化下拉框操作,结合循环遍历目标年份与对应月份,完成批量下载:

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

# 初始化浏览器(若chromedriver不在系统PATH,需传入路径参数)
driver = webdriver.Chrome()
driver.get("https://www.aduanas.gob.do/estadisticas/dinamicas/")
driver.maximize_window()
wait = WebDriverWait(driver, 15)

# 定义要批量处理的年份与对应月份(可按需调整范围)
target_year_months = {
    "2022": ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio"],
    "2023": ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
}
# 固定选择的数据类型(示例为第二个选项"Exportaciones")
target_data_type = "Exportaciones"

try:
    # 循环处理每个年份及对应月份
    for year, months in target_year_months.items():
        # 选择年份
        year_select = Select(wait.until(EC.presence_of_element_located((By.ID, "year"))))
        year_select.select_by_visible_text(year)
        time.sleep(1)
        
        for month in months:
            # 选择月份
            month_select = Select(wait.until(EC.presence_of_element_located((By.ID, "month"))))
            month_select.select_by_visible_text(month)
            time.sleep(1)
            
            # 选择数据类型
            type_select = Select(wait.until(EC.presence_of_element_located((By.ID, "type"))))
            type_select.select_by_visible_text(target_data_type)
            time.sleep(1)
            
            # 点击查询按钮,等待数据加载
            search_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="App"]/div/div/div[1]/div/div[3]/div/div/form/div/div[4]/button/img')))
            search_btn.click()
            time.sleep(5)
            
            # 点击下载按钮,触发文件下载
            download_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="App"]/div/div/div[1]/div/div[3]/div/div/form/div/a')))
            download_btn.click()
            time.sleep(3)

finally:
    # 确保浏览器最终关闭
    time.sleep(10)
    driver.quit()

代码说明

  • 用Select类直接通过可见文本选择下拉选项,比手动点击更稳定,避免元素定位错误
  • 结合WebDriverWait等待元素加载,替代部分固定time.sleep,提升代码健壮性
  • 通过字典定义年份与月份的映射关系,可灵活调整需要批量下载的时间范围
  • 加入try-finally块,确保无论执行是否异常,浏览器都会正常关闭

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:48:26