Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
Cómo seleccionar valores de múltiples capas del menú desplegable usando Selenium

Tengo dificultades para seleccionar una fecha de un menú desplegable en un sitio:

https://www3.hkexnews.hk/sdw/search/mutualmarket.aspx?t=hk&t=hk

Se ve que hay un menú desplegable de fecha de calendario con código HTML

 <input name="txtShareholdingDate" type="text" value="2022/07/15" id="txtShareholdingDate" class="input-searchDate active" data-reset="2022/07/16" readonly="readonly">

Mi primera estrategia para seleccionar una fecha arbitraria es:

 from selenium import webdriver browser = webdriver.Chrome(executable_path=r'D:\chromedriver.exe') browser.get(link) dateelem = browser.find_element_by_id('txtShareholdingDate') dateelem.click()

Y en el navegador sin cabeza parece tener 3 columnas desplegables: "Año", "Mes", "Día".

A partir de aquí, me he quedado atascado tratando de seleccionar una fecha aleatoria aquí (por ejemplo, 21/09/2021), y busqué en Google una gran cantidad de soluciones alternativas. La mayoría de esas soluciones propuestas involucraban el uso find_element_by_css_selector() o xpaths con etiquetas anidadas, pero siempre recibía errores como "No se puede ubicar el elemento".

Otro tipo de soluciones que probé fue

 from selenium.webdriver.support.ui import Select dateelem = Select(browser.find_element_by_id('txtShareholdingDate'))

y luego saldría el siguiente error:

 UnexpectedTagNameException: Message: Select only works on <select> elements, not on <input>

Entonces, ¿cómo podría evitar las múltiples capas del menú desplegable para obtener una fecha general?

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

El selector de fecha se genera a través de una etiqueta <input>

fecha_desplegable

Entonces no puedes usar la clase Select() .

Además, el elemento <input> tiene establecido el atributo readonly="readonly" .


Solución

Para seleccionar una fecha diferente, puede usar el método removeAttribute() para eliminar el atributo de readonly y luego usar el método setAttribute() para establecer el nuevo valor de la siguiente manera:

 driver.get('https://www3.hkexnews.hk/sdw/search/mutualmarket.aspx?t=hk&t=hk') calendar = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#txtShareholdingDate"))) driver.execute_script("arguments[0].removeAttribute('readonly')", calendar) driver.execute_script("arguments[0].setAttribute('value','2021/08/16')", calendar)

Nota : debe agregar las siguientes importaciones:

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

Instantánea del navegador:

hkexnoticias

about 4 years ago · Santiago Gelvez Denunciar

0

Prueba el siguiente código, solo cámbialo como quieras

 driver.execute_script("document.getElementById('txtShareholdingDate').value='2022/03/14'") sleep(7) btnSearch=driver.find_element(By.ID,"btnSearch") btnSearch.click()

Importar

 from selenium import webdriver from selenium.webdriver.common.by import By
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda