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

167
Vistas
¿Cómo administrar un botón con atributo deshabilitado usando Python Selenium?

Tener este botón:

 <button id="btn-login-5" type="button" class="m-1 btn btn-warning" disabled="">Update</button>

Quiero eliminar el atributo de desactivación para poder hacer clic en el botón.

Este es el código que veo cada vez:

 button = self.driver.find_element( By.XPATH, "/html/body/div/div/button") self.driver.execute_script( 'arguments[0].removeAttribute("disabled");', button)

Pero no puedo entender cómo puede funcionar eso para alguien, quiero decir, si el elemento está deshabilitado, Selenium no puede ejecutar esa primera línea, no puede asignar el "botón" var porque no puede encontrar ese elemento .

¿Me estoy perdiendo de algo? Recibo este error si ejecuto eso:

 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/button"}

Actualizar

Me acabo de dar cuenta de que esto está relacionado con la cuadrícula de selenio, traté de hacer clic en el botón de muchas maneras, y nadie funciona, pero si en lugar de usar la cuadrícula de selenio uso un controlador web local, ¡todos funcionan! Así que no tengo idea de qué hacer ahora.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Si usa este xpath relativo, en lugar de uno absoluto, funciona:

 button = driver.find_element(By.XPATH, "//button[@type='button']")

¿Pero es este el único botón en tu DOM? De lo contrario, es posible que deba agregarle otras entidades relativas.

Código refactorizado (según la información de consulta proporcionada):

 button = driver.find_element(By.XPATH, "//button[@type='button']") driver.execute_script('arguments[0].removeAttribute("disabled");', button) button.click()

Producción:

 Process finished with exit code 0
about 4 years ago · Juan Pablo Isaza Denunciar

0

El atributo disabled se puede configurar para evitar que un usuario haga clic en el botón hasta que se cumpla alguna otra condición (como seleccionar una casilla de verificación, etc.). Luego, un JavaScript podría eliminar el valor deshabilitado y volver a hacer clic en el botón.


Estabas lo suficientemente cerca. Para eliminar el atributo disabled , el elemento Actualizar aún se puede identificar por su presencia utilizando la siguiente estrategia de localización :

 button = WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.XPATH, "//button[@class='m-1 btn btn-warning' and text()='Update']"))) self.driver.execute_script('arguments[0].removeAttribute("disabled");', button)
about 4 years ago · Juan Pablo Isaza Denunciar

0

Todo funciona bien, el problema es otro, mi código no pudo encontrar el elemento porque el elemento no estaba allí, algo muy extraño, tengo un docker con el servidor de la página y si abro la página puedo ver el botón pero el controlador web de la cuadrícula de selenio no carga el botón en absoluto, no sé por qué, tal vez ese botón depende de algún servidor al que no se puede acceder desde el controlador web.

Le pediré esto al desarrollador de la página, pero el código era bueno :)

Perdí un día completo de trabajo por nada :)

about 4 years ago · Juan Pablo Isaza 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