Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

246
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda