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

网页爬取中用ChromeDriver操作下拉列表失败,求助解决方法

问题描述

我尝试用ChromeDriver访问网站 https://apps5.mineco.gob.pe/transparencia/mensual/,需要操作页面中的一个下拉列表,选择“Solo Proyectos”选项,但以下两段代码都无法生效:

第一段代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support.select import Select

# Inicialización del driver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Entrando al sitio indicado en la pregunta
driver.get("https://apps5.mineco.gob.pe/transparencia/mensual/")
time.sleep(5)

# Filtro

Lista=Select(driver.find_element("id","ctl00_CPH1_DrpActProy"))
Lista.select_by_value("Proyecto")

第二段代码

# Inicialización del driver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Entrando al sitio indicado en la pregunta
driver.get("https://apps5.mineco.gob.pe/transparencia/mensual/")
time.sleep(5)

# Filtro

Lista=driver.find_element(By.XPATH,'//*[@id="ctl00_CPH1_DrpActProy"]/option[3]')
Lista.click()
问题分析与修正方案

原代码存在的问题

  1. 不可靠的等待方式:time.sleep(5)是固定等待,若页面加载慢,元素可能还未渲染完成就执行操作,导致找不到元素
  2. 定位方式不规范:第一段代码中用字符串"id"定位元素,不符合Selenium的标准用法,应使用By.ID常量
  3. 索引定位易失效:第二段代码通过option的索引[3]定位,若页面结构变化,索引会失效
  4. 重复导入:第一段代码重复导入了Select类,属于冗余代码

修正后的代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService

# 初始化Chrome驱动
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://apps5.mineco.gob.pe/transparencia/mensual/")

# 显式等待下拉框元素加载完成(最多等待10秒)
wait = WebDriverWait(driver, 10)
select_element = wait.until(EC.presence_of_element_located((By.ID, "ctl00_CPH1_DrpActProy")))

# 初始化Select对象并选择目标选项
select = Select(select_element)
# 优先用可见文本选择,更稳定
select.select_by_visible_text("Solo Proyectos")

# 若确认选项的value属性为"Proyecto",也可使用:
# select.select_by_value("Proyecto")

关键修正点

  • 用显式等待替代固定睡眠,确保元素完全加载后再操作,避免元素未找到的错误
  • 使用By.ID常量定位元素,符合Selenium规范
  • 采用select_by_visible_text选择选项,避免因页面结构变化导致的索引失效问题
  • 清理了冗余的导入语句

内容的提问来源于stack exchange,提问作者Juan Jose Collantes Antezana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:32:09